【Unity】Snapdragon Profilerの導入について

Unityでグラフィックのデバッグやプロファイルをしようとした時に、

Windows上で行う場合はUnityでサポートされている RenderDoc をインストールすると

Game と Scene ビューにボタンが追加され、気軽にチェックできるようになります。

https://docs.unity3d.com/ja/current/Manual/RenderDocIntegration.html

 

でも、Androidの実機上でのプロファイルを行ってみたい!

調べてみると最適化関連の記事などでよく耳にする Snapdragon Profiler が

どうやら自分の私物のAndroidのGPUに合っている。

 

じゃあ、これを使ってみよう!と思いインストールしてみました。

がしかし、なかなかスムーズにはいかず…。

色々検索しましたが、Unityでビルドしたアプリを Snapdragon Profiler で

プロファイルするまでの導入が書かれた日本語の記事もなさそうだったので

簡単に導入までをまとめてみました。


●まずは Qualcomm のサイトのアカウントを作り、Snapdragon Profiler のインストーラーをDLします。

こちらのリンク先からDLできます。

https://developer.qualcomm.com/download/software

Home > Downloads > Software Downloads > Snapdragon Profiler - Windows (Windowsの場合)

 

 

●adb(Android Debug Bridge)コマンドを使えるようにする必要があるので、Android Studio をインストールします。

https://developer.android.com/studio/index.html

※ UnityHub からインストール時に 2019.x 以降の場合はAndroid Build Support > Android SDK & NDK Tools にチェックを入れることで、

 adb.exe もインストールされるので、その場合はAndroid Studioを追加でインストールする必要はありません。

 

お持ちのAndroid端末(開発者向けオプション」の"デバッグ"の「USBデバッグ」を有効にした状態)をPCと接続して、コマンドプロンプトを開いて

adb shell

と入力してみて、もし no devices などと出てしまい認識しない場合、

デバイスマネージャーを開いて、「ほかのデバイス」の中にADB Interfaceがあるかもしれません。

 

その場合は Google USB Driver をAndroid開発者サイトからお持ちの端末のブランドのものをDLするか、

もしくは Android Studio をインストールされていれば Android Studio を起動させて

右下の Configure > SDK Manager を開いて SDK Tools タブ のGoogle USB Driverにチェックを入れてDLします。

 

デバイスマネージャーで先程のADB Interface選んで

右クリックメニューの「ドライバー ソフトウェアの更新」

 

→「コンピューターを参照してドライバーソフトウェアを検索します」
→「コンピューター上のデバイスドライバーの一覧から選択します」
→「すべてのデバイスを表示」
→「ディスク使用」
→さきほどインストールされたGoogle USB Driverのフォルダを指定
(例  :  C:\Users\ユーザー名\AppData\Local\Android\Sdk\extras\google
→「Android ADB Interface」を選択して、「次へ」をクリック
※参考サイト
『ADBドライバのインストールとUSBデバッグのセットアップ - Qiita
https://qiita.com/couzie/items/2dd854df9c8c74317078

 

●UnityでプロファイルしたいアプリをAndroid向けにビルドします。

Unity 2019.x以降であれば、上記で書いたようにUnity HubからAndroid SDKを追加できます。

 

Unity 2018以前のものであれば、Android Studio を開いて

右下の Configure > SDK Manager の上の方にある「Android SDK Location」に書かれているパスをコピーします。

 

UnityでEdit > Preferencesを開き、External ToolsタブのAndroid SDKの項目にペーストしてパスを設定します。

(おそらくこんなパス? : C:\Users\ユーザー名\AppData\Local\Android\sdk

 

File > Build Settings でターゲットプラットフォームを「Android」に Switch Platform をする。

 

同じくBuild Settings内の Player Settings を開いて、Androidのタブに変更し

真ん中辺りにある「Package Name」を com.Company.ProductName から適用なものに変更します。

※ com.●●●.▲▲▲ という形式は変えずに、例えば com.Test.Profile のようなものにして下さい

 

また、Player Settings内の「Write Permission」を Internal から External(SDCard) に変更する必要ある。

 

同じくBuild Settings内の Player Settings を開いてAndroidのタブに変更し、

真ん中辺りにある「Package Name」を com.Company.ProductName から適用なものに変更します。

※ com.●●●.▲▲▲ という形式は変えずに、

    例えば com.Test.Profile のようなものにして下さい

 

また、Player Settings内の「Write Permission」を

Internal から External(SDCard) に変更する必要ある。

 

ここが一番自分がハマった箇所です。

これを変更しなければ、
Snapdragon ProfilerでTake Snapshot を撮った際に
右図のような警告が出てしまいます。

the app manifest と書かれていたので、AndroidManifestを編集するのかと思って、

書き換えていましたが効果はありませんでした。

というか、結果的にAndroidManifestは関係なく、

Snapdragon Profiler でプロファイルする事にはありませんでした…。

 

Internal から External(SDCard) に変更することで、

ビルド後のアプリの初回起動時に右図のようなダイアログが表示されるので、

「許可」を押して下さい。

 

 ちなみにここで「~ファイルへのアクセスを〇〇に許可しますか?」の

 〇〇部分はPlayer Settingsの上の方にある「Product Name」に入力したものが表示されます。

③のPackage Nameで書いているProduct Nameと、

そのProduct Nameをあえて違う名前にしてみるテストしてみるとビルドは問題なさそうでしたが、

おそらく通常は合わせた方が良いと思われます。

 

File > Build Settings で「Development Build」をONにする。

 

 

●Snapdragon Profiler でSnapshotを撮ってみる

Android端末をPCに繋いでいる状態で、Snapdragon Profiler を起動します。

 

Snapdragon Profiler で Connect to a Device を押して、

繋いでいる端末が表示されていると思いますのでそれを選択した状態で Connect を押します。

 

接続できていれば、

「Realtime」

「New Trace Capture」

「New Snapshot Capture」

がクリックできる状態になると思います。

 

「New Snapshot Capture」を押してみると、

「Snapshot 1」というビューが表示されます。

 

プロファイルしたいアプリが起動中であれば、

Launch Applicationボタンの下にPlayerSettingsで

設定したPackage Nameが表示されると思います。

もし表示されていない or まだ起動していない場合は Launch Applicationボタンを押して、

プロファイルしたいアプリのPackage Nameを検索します。

見つけたら選択してLaunchボタンを押すと、起動して表示されるようになります。

 

アプリ起動後は上の方にある赤いアイコンの Take Snapshot ボタンを押すと、

下記の右側のように「Snapshot 1」のところにゲームのスクリーンショットが表示され、

「Data Explorer」ビューのところにはレンダリングの情報が表示されます。

これはUnityの Frame Debugger ウィンドウで表示される情報と同様の内容です。

 

 

以上がUnityでビルドしたアプリをSnapdragon Profilerでプロファイルする導入の解説です。

少し簡単にまとめた部分もあるので分かりづらい部分もあるかもしれませんが、

自分の答えられる範囲であればお答えしますのでコメント下さい。

また、何か間違いやもっと簡単な方法があれば教えて下さい。

 

あと、Snapdragon Profiler自体の使い方は自分もこれから触っていく所なので

まだ理解できてない部分が多いですが、まとめられそうになったらそのうち書こうかと思います。