環境
Unity 2019.3.0f6
ビルド設定
・Minimum API Level - Android7.1 'Nougat' (API Level 25)
・Target API Level - Android7.1 'Nougat' (API Level 25)
Oculus Quest
・Android version 7.1 (API Level 25)
背景
元々、2018.4.6f1でAndroidビルドできていたものを、2019.3.0f6に移行した時に起きた問題です。
基本的にビルドに関わるところは、何もいじらない状態で行っています。
また、Oculus Questで起きた問題ですが、Androidバージョン7.1 (API Level 25)のデバイスであれば、今回の問題にぶち当たる可能性があります。
症状
UnityでAndroidビルド。
以下のようなエラーが出る。
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':launcher:processDebugResources'. > Android resource linking failed C:\ProjectName\Temp\gradleOut\launcher\build\intermediates\merged_manifests\debug\AndroidManifest.xml:54: AAPT: error: attribute android:maxAspectRatio not found. error: failed processing manifest. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 9s ] stdout[ > Task :launcher:preBuild UP-TO-DATE > Task :unityLibrary:preBuild UP-TO-DATE > Task :unityLibrary:preDebugBuild UP-TO-DATE > Task :launcher:prepareLintJar UP-TO-DATE > Task :unityLibrary:checkDebugManifest UP-TO-DATE > Task :unityLibrary:processDebugManifest C:\ProjectName\Temp\gradleOut\unityLibrary\src\main\AndroidManifest.xml:4:3-17:17 Warning: application@android:allowBackup was tagged at AndroidManifest.xml:4 to replace other declarations but no other declaration present > Task :unityLibrary:compileDebugAidl NO-SOURCE > Task :unityLibrary:packageDebugRenderscript NO-SOURCE > Task :unityLibrary:compileDebugRenderscript NO-SOURCE > Task :unityLibrary:generateDebugBuildConfig UP-TO-DATE > Task :unityLibrary:generateDebugResValues UP-TO-DATE > Task :unityLibrary:generateDebugResources UP-TO-DATE > Task :unityLibrary:packageDebugResources UP-TO-DATE > Task :launcher:preDebugBuild > Task :launcher:compileDebugAidl NO-SOURCE > Task :launcher:compileDebugRenderscript NO-SOURCE > Task :unityLibrary:generateDebugRFile UP-TO-DATE > Task :launcher:checkDebugManifest UP-TO-DATE > Task :unityLibrary:prepareLintJar UP-TO-DATE > Task :unityLibrary:generateDebugSources UP-TO-DATE > Task :launcher:generateDebugBuildConfig UP-TO-DATE > Task :launcher:generateDebugSources UP-TO-DATE > Task :launcher:mainApkListPersistenceDebug UP-TO-DATE > Task :launcher:generateDebugResValues UP-TO-DATE > Task :launcher:generateDebugResources UP-TO-DATE > Task :unityLibrary:javaPreCompileDebug UP-TO-DATE > Task :unityLibrary:compileDebugJavaWithJavac UP-TO-DATE > Task :launcher:mergeDebugResources UP-TO-DATE > Task :launcher:createDebugCompatibleScreenManifests UP-TO-DATE > Task :unityLibrary:bundleLibCompileDebug > Task :unityLibrary:mergeDebugShaders > Task :unityLibrary:compileDebugShaders > Task :unityLibrary:generateDebugAssets > Task :launcher:processDebugManifest > Task :launcher:javaPreCompileDebug > Task :launcher:processDebugResources FAILED > Task :unityLibrary:packageDebugAssets Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings 24 actionable tasks: 9 executed, 15 up-to-date
コケてるが出ているところは、
Execution failed for task ':launcher:processDebugResources'. > Android resource linking failed C:\ProjectName\Temp\gradleOut\launcher\build\intermediates\merged_manifests\debug\AndroidManifest.xml:54: AAPT: error: attribute android:maxAspectRatio not found. error: failed processing manifest.
の部分です。
言っていることは、
「AndroidManifest.xmlにmaxAspectRatioが見つからなかった」
です。
なので、エラーメッセージの通りAssets/Plugins/Android/AndroidManifest.xmlにmaxAspectRatioを追加して、ビルドしました。
<activity android:maxAspectRatio="2.4"> <!--2.4は適当--> ... </activity>
ですが、変わらずmaxAspectRatio not foundと言われます。
これはmaxAspectRatio が、 API Level 26以上の時に使うパラメータだからです。
なので、Minimum API LevelとTarget API Levelを26にします。
この設定にするとAndroidビルドに成功します!
そして、Oculus Questに apk をインストールすると・・・、
Failed parse during install package. Requires newer sdk version #26 (current version is #25)
インストールに失敗します。
これは、「デバイスのAPI Levelが25なのに、アプリの要求API Levelが26以上」だからです。
では、API Level 25にないパラメータなのかというと、そういうわけでもないです。
API Level 25以前の場合はandroid.max_aspectを使用するように言われています。
なので、AndroidManifest.xmlにandroid.max_aspectを追加します。
<application> <meta-data android:name="android.max_aspect" android:value="2.4" /> <!--2.4は適当--> ... </application>
これでビルドすると・・・、
Execution failed for task ':launcher:processDebugResources'. > Android resource linking failed C:\ProjectName\Temp\gradleOut\launcher\build\intermediates\merged_manifests\debug\AndroidManifest.xml:54: AAPT: error: attribute android:maxAspectRatio not found. error: failed processing manifest.
なぜか、最初のエラーがまた出ます・・・。
対処方法
結局、API Level 26以上に対応している、maxAspectRatioを追加します。
このままだとインストール時に失敗するので、Unityの設定で、
Minimum API Levelを25、
Target API Levelを26
にしてビルドします。
こうすることで、ビルドに成功し、インストールも問題なくできました。
もちろん、apkをインストールし、問題なくアプリケーションが動作するところまで確認しました。
Special Thanks
Unityゲーム開発者ギルドのお二人。
Koji Hasegawa さん
やまだ たいし さん