【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