【Unity】Androidビルドでエラー"maxAspectRatio not found"
環境
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 さん
やまだ たいし さん