【Unity】AndroidビルドでエラーmaxAspectRatio not found
前書き
Unityを使ってAndroidビルドしたところ、なぜか怒られたのでメモとして残しておきます。
環境
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.
<b>なぜか</b>、最初のエラーがまた出ます・・・。
対処方法
結局、API Level 26以上に対応している、maxAspectRatioを追加します。
このままだとインストール時に失敗するので、Unityの設定で、
Minimum API Levelを25、
Target API Levelを26
にしてビルドします。
こうすることで、ビルドに成功し、インストールも問題なくできました。
もちろん、apkをインストールし、問題なくアプリケーションが動作するところまで確認できました。
最後に
調べてもどこにも解決方法がなかったので、同じ現象で困っている方は是非試してみてください。
(Androidのお気持ちはわからない)
参考文献
画面サポートの制限の宣言 - Android developers
Special Thanks
Unityゲーム開発者ギルドのお二人。
Koji Hasegawa さん
やまだ たいし さん
Discussion