UnityのAndroidビルド環境構築にあたって、非常にアンドキュメントな部分が多く、また最新のAndroid SDKとUnityとで同期がとれておらず苦労した点が多々ありました。本記事ではそれらのトラブルシューティングをまとめていきます。
Android SDK コマンドラインツールの解凍
こちらの記事でAndroid SDKコマンドラインツールの使い方についてまとめています。
コマンドラインツールをダウンロードして解凍して利用するのですが、Windowのxploreから右クリック>すべて展開で展開すると、謎の”_”フォルダができてしまい、以下のようなエラーが出てしまい、ツールがうまく動作しません。
PS E:\tmp\Android\sdk\tools\bin> .\sdkmanager.bat --version
エラー: メイン・クラスcom.android.sdklib.tool.sdkmanager.SdkManagerCliを検出およびロードできませんでした
原因: java.lang.ClassNotFoundException: com.android.sdklib.tool.sdkmanager.SdkManagerCli
PS E:\tmp\Android\sdk\tools\bin>
これにはかなりハマりました。7ZIPなど別の解凍ツールを用いれば回避できることを調べるのにかなりのサイトをめぐりました。7ZIPはインストール済みだったので、そちらを使えばハマることはなかったのですが。。。
Android SDKコマンドラインツールのフォルダ構成
またまたコマンドラインツールです。どれだけ罠が多いのか、途中で心がへし折れそうになりました。
こちら、解凍が正しくできた環境で、SDKManagerを使用すると、今度は以下のようなエラーが出力されました。
PS E:\tmp\Android\sdk\tools\bin> .\sdkmanager.bat --version
Warning: Could not create settings
java.lang.IllegalArgumentException
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Usage:
sdkmanager [--uninstall] [<common args>] [--package_file=<file>] [<packages>...]
sdkmanager --update [<common args>]
sdkmanager --list [<common args>]
sdkmanager --licenses [<common args>]
sdkmanager --version
With --install (optional), installs or updates packages.
By default, the listed packages are installed or (if already installed)
updated to the latest version.
With --uninstall, uninstall the listed packages.
<package> is a sdk-style path (e.g. "build-tools;23.0.0" or
"platforms;android-23").
<package-file> is a text file where each line is a sdk-style path
of a package to install or uninstall.
Multiple --package_file arguments may be specified in combination
with explicit paths.
With --update, all installed packages are updated to the latest version.
With --list, all installed and available packages are printed out.
With --licenses, show and offer the option to accept licenses for all
available packages that have not already been accepted.
With --version, prints the current version of sdkmanager.
Common Arguments:
--sdk_root=<sdkRootPath>: Use the specified SDK root instead of the SDK
containing this tool
--channel=<channelId>: Include packages in channels up to <channelId>.
Common channels are:
0 (Stable), 1 (Beta), 2 (Dev), and 3 (Canary).
--include_obsolete: With --list, show obsolete packages in the
package listing. With --update, update obsolete
packages as well as non-obsolete.
--no_https: Force all connections to use http rather than https.
--proxy=<http | socks>: Connect via a proxy of the given type.
--proxy_host=<IP or DNS address>: IP or DNS address of the proxy to use.
--proxy_port=<port #>: Proxy port to connect to.
--verbose: Enable verbose output.
* If the env var REPO_OS_OVERRIDE is set to "windows",
"macosx", or "linux", packages will be downloaded for that OS.
PS E:\tmp\Android\sdk\tools\bin>
想像してみてください。解凍がうまくいってウキウキでコマンド実行してこのエラーが出た時のエンジニアの顔を・・・ツールが何か食えないものを食わされたようなエラーです。
こちらも調査した結果、コマンドラインツールのフォルダ構造がまずいことがわかりました。解凍してできたtoolsフォルダをlatestにリネーム、それをsdk/cmdline-tools/下に移動させます。それを実行することで無事ツールが動作し、正しい結果を得られました。
PS E:\tmp\Android\sdk\cmdline-tools\latest\bin> .\sdkmanager.bat --version
3.6.0
PS E:\tmp\Android\sdk\cmdline-tools\latest\bin>
UnityのAndroidサポート
UnityにはAndroidのサポートオプションをインストール時に選択でき、それを選択してインストールすると以下のように、最初からUnityがAndroid SDKを抱えてインストールされてくれます。
これが非常に中途半端。ビルドもできて、実機の実行もできる。ただ、Visual Studioでのアタッチができない。Wifiに接続しているとWifi経由でアタッチできそうな項目が出てくるが、選択してもデバッグできない。
当初このSDKを使用するつもりでしたが、デバッグがどうしてもできないので、前述のコマンドラインツールでインストールしたという経緯があります。自分でSDKを準備することで、Visual StudioでUSB接続であっさりデバッグできました。
謎のSDK古いよWarning
これが一番ハマりました。自前でAndroid SDKを準備することでVisual Studioでデバッグできるようにはなったのですが、ビルドの度に以下のようなWarningがでます。
SDK Tools version 0.0 < 26.1.1.
latestを選択すると、無事ビルドできるのですが、毎回毎回聞かれます。ならばと隣のUpdate Android SDKボタンを押してアップデートを試みます。
SDK Tools version 0.0 < 26.1.1.
Make sure Android SDK path is writable by the Editor.
アップデートに失敗します。。。
対策を探してようやくたどり着いたのが、toolsフォルダ下が新しすぎたのが原因(のようだ)です。Android SDKフォルダのtoolsを削除して、r26.1.1のtools(tools_r26.1.1-windows.zip)をWebから探してきて展開することで、Warningがでなくなることを確認しました。
まとめ
サポートなどもない無料で使用させていただいているエンジニアはこの編の情報がないので非常に苦労されているのかなぁと思います。自分がもし、今後またセットアップすることがあったら、絶対同じ罠にはまる自信があるので、備忘録として残しておきます。あと、誰かの役に立てれば非常にうれしいです。昔の自分にこの記事を見せてやりたいです。
コメント
[…] ZIPを解凍する。このときWindows標準ので解凍するとダメ。(参考)7-Zipで解凍する。 […]