ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

【UE4.21】「The specified Android SDK Build Tools version (26.0.1) is ignored, as it is below the minimum supported version (26.0.2) for Android Gradle Plugin 3.0.1.」 というWarningが出てAndroidパッケージ作成に失敗する問題への対応方法

本題

記事タイトルの通りですが、UE4.21にてGradleを有効にした状態でAndroidパッケージを作成すると、以下のメッセージがログに出力されてパッケージ作成に失敗する場合があります。

 Creating rungradle.bat to work around commandline length limit (using unused drive letter Z:)
 Making .apk with Gradle...
 To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/4.1/userguide/gradle_daemon.html.
 Daemon will be stopped at the end of the build stopping after processing
 WARNING: The specified Android SDK Build Tools version (26.0.1) is ignored, as it is below the minimum supported version (26.0.2) for Android Gradle Plugin 3.0.1.
 Android SDK Build Tools 26.0.2 will be used.
 To suppress this warning, remove "buildToolsVersion '26.0.1'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.
 File C:\Users\awfor\.android\repositories.cfg could not be loaded.
 Checking the license for package Android SDK Build-Tools 26.0.2 in C:\NVPACK\android-sdk-windows\licenses
 Warning: License for package Android SDK Build-Tools 26.0.2 not accepted.
 
 FAILURE: Build failed with an exception.

原因は最近Googleがライセンス契約を変更したのですが、UE4.21時点ではその変更に対応できていないからです。 (ライセンス更新は2019/1/16 頃、たぶん)

この問題を解決するには、UE4.22から入る新しいライセンス契約への対応をUE4.21に移植する必要があります。といっても対応は簡単で、UE4.22以降が持つ Engine/Source/ThirdParty/Android/package.xmlUE4.21のpackage.xmlに上書きした後に、再度Project設定のAndroidカテゴリにある "Accept SDK License"ボタンを押すだけです。
f:id:pafuhana1213:20190206005342p:plain

なお、この記事を書いた2019/2/6時点では以下のurlからUE4.22版のpackage.xmlをDL可能です。
https://github.com/EpicGames/UnrealEngine/blob/4.22/Engine/Source/ThirdParty/Android/package.xml

おまけ 1

UE4.21からAndroidのNDKのバージョンが 12b から 14b に上がっています。そのため、UE4.20以前にAndroid開発をしていた場合は、\Engine\Extras\AndroidWorks\Win64\CodeWorksforAndroid-1R7u1-windows.exe を使って開発環境をアップデートする必要があります。アップデート後は、UE4エディタのプロジェクト設定におけるAndroid SDKカテゴリにある各項目を新しいバージョンのものに合わせることをお忘れなく。あと、インストールする前に以前のバージョンをアンインストールした方が安全かと思います。

Android
Android NDK r14b (新しい CodeWorks for Android 1r7u1 インストーラは、Windows および Mac 上の、以前の CodeWorks を置き換えます。Linux は 1r6u1 と修正版を使用します)
https://www.unrealengine.com/ja/blog/unreal-engine-4-21-released?sessionInvalidated=true

おまけ 2

上述の対応後にAndroidパッケージの作成を行うと、以下のエラーが発生する場合があります。

LogPlayLevel: Error: C:\Users\●●●\.gradle\caches\transforms-1\files-1.1\support-compat-27.1.0.aar\36ca67ef4f432d33200b3e8a5af4a755\res\values\values.xml:20:5-70: AAPT: error: resource android:attr/fontStyle not found.
 LogPlayLevel: Error: C:\Users\●●●\.gradle\caches\transforms-1\files-1.1\support-compat-27.1.0.aar\36ca67ef4f432d33200b3e8a5af4a755\res\values\values.xml:20:5-70: AAPT: error: resource android:attr/font not found.
 LogPlayLevel: Error: C:\Users\●●●\.gradle\caches\transforms-1\files-1.1\support-compat-27.1.0.aar\36ca67ef4f432d33200b3e8a5af4a755\res\values\values.xml:20:5-70: AAPT: error: resource android:attr/fontWeight not found.
 LogPlayLevel: Error: Z:\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: error: resource android:attr/fontStyle not found.
 LogPlayLevel: Error: Z:\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: error: resource android:attr/font not found.
 LogPlayLevel: Error: Z:\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:95: error: resource android:attr/fontWeight not found.
 LogPlayLevel: Error: error: failed linking references.
 LogPlayLevel: Failed to execute aapt

発生した場合は、Android SDK API Levelをandroid-21に戻してみてください。これで解決することが多いです。

おまけ 3

プロジェクト設定のAndroidカテゴリにある "Enable Gradle Instead of Ant"を無効にすれば、gradleではなく昔のantを使ってパッケージを作成するようになるため、gradle絡みの問題を回避することが可能です。しかし、antは古いシステムなので推奨されていない上に今後削除される予定なのでご注意ください。

また、ARCoreを使う場合は必ずgradleを使用する必要があります。 antを使ってパッケージを作った場合、起動後に即クラッシュします。クラッシュした際のlogcatは以下の通り。

02-05 23:37:22.006: E/AndroidRuntime(17685): java.lang.UnsatisfiedLinkError: dlopen failed: library "libarcore_sdk_c.so" not found
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at java.lang.Runtime.loadLibrary0(Runtime.java:977)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at java.lang.System.loadLibrary(System.java:1530)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at com.epicgames.ue4.GameActivity.<clinit>(GameActivity.java:5504)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at java.lang.Class.newInstance(Native Method)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.ActivityThread.-wrap12(ActivityThread.java)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.os.Handler.dispatchMessage(Handler.java:102)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.os.Looper.loop(Looper.java:159)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at android.app.ActivityThread.main(ActivityThread.java:6097)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at java.lang.reflect.Method.invoke(Native Method)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
02-05 23:37:22.006: E/AndroidRuntime(17685): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
02-05 23:37:22.008: W/ActivityManager(2739):   Force finishing activity com.YourCompany.ARTemplateBuild/com.epicgames.ue4.GameActivity

どうやらgradleが持っている libarcore_sdk_c.so が必要なので、antだとクラッシュするようです。こちらもご注意くださいまし。

おわり