UnityでAndroid版をビルドした際に遭遇したAndroid SDK絡みのエラーに関するメモ。
Unity Android SDK絡みのエラー
状況としては以下です。
- Unity バージョン2019.1.0f2を2019.3.12f1にアップデート
- target SDK Android 9.0
- min SDK Android 6.0
- Unityバージョンアップデートによる影響なのか、しばらくビルドしていなかったからなのか、Android版ビルド時にエラーが出てapkを生成できない(iOS版はビルド成功する)
- 以前は普通にビルドできていた
ビルド時に出力されるエラーは以下。
Required API level 26.
試してみたこと
エラーメッセージから、ネットで調ベてでてきた以下のような対処法を試してみました。
- SDK・NDK・Javaのパスを確認(Android Studioで使用しているものを指定)
- 指定されたAPI LevelのSDKがインストールされているか確認
- こちらを参考に古いバージョンの Android SDK Tool(25.2.5)に入れ替えて再ビルド
- Unityの再起動・PCの再起動
- Javaの環境変数設定の見直し
- Android StudioのSDKを別の場所に移動させて、参照先を変更
- SDK・NDK・JavaをUnity Hubでインストールしたものに変更
上記の対応を行っていく過程で、以下のようなエラーも出ました。
(やっぱりSDKのパスがうまく反映されていない)
CommandInvokationFailure: Unable to install additional SDK platform. Please run the SDK Manager manually to make sure you have the latest set of tools and the required platforms installed. "platforms;android-26"
いろいろ試しましたが、「SDK・NDK・JavaをUnity Hubでインストールしたものに変更」を行った結果、SDKのチェックの段階ではエラーが出て終了することは無くなりました。
ただ、apkが出力される直前の段階で以下のようなエラーが出てやっぱりビルドに失敗しました。
ArgumentNullException: Value cannot be null. Parameter name: path1
こちらのエラーメッセージを検索すると、以下の記事がヒットしました。
こちらの記事によると、Unityを再起動すればOK的な感じでしたが、私の環境ではUnityの再起動やPCの再起動を行ってもエラーが出続けました。
で、その後試したのは、Gradleにもチェックをいれる方法。
ネットを調べると、SDKやNDK、Javaのパス設定については確認すべき的な内容が多いのですが、Gradleに関しては特に述べられてなかったのでノーマークでした。
Gradleにチェックを入れてビルドしてみたら、前述したエラーが出なくなりました。
ですが、今度は以下のエラーが出ました。
The attribute application@appComponentFactory=androidx.core.app.CoreComponentFactory in com.android.support:support-compat:28.0.0 collides with another value
(See the Console for details)
こちらのメッセージを調べて見ると、AndroidXのライブラリとサポートライブラリの競合エラーっぽいです。
Unity PlayerSettingsの「Other Settings」「Build」の項目から、
「Custom Main Gradle Template」と「Custom Gradle Properties Template」にチェックを入れて、
生成された「gradleTemplate.properties」に以下を追記します。
これでAndroidXライブラリ関連のエラーが消えてビルドできるようになりました。
Android SDK絡みのエラーって3ヶ月とか半年に一回くらいは発生する気がします。
今回の経験で、Android StudioのSDKとUnityで使うSDKは分けた方がトラブル少ないかもなと思いました。
SDKは結構ストレージ容量くうので、1個をAndroid StudioとUnityで参照すればいいやと思ってましたが、Unityがたまにうまく読み込んでくれなくなるリスクを考えると、Unity用にSDKを入れておくのもありだなと思いました。
今回のビルドできない問題でまる1日くらい悩んでしまったので、この経験が今後何かの役に立つことを願いたいと思います。