🤔

【Unity】AndroidビルドでエラーmaxAspectRatio not found

2020/09/23に公開

前書き

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.xmlmaxAspectRatioが見つからなかった」
です。

なので、エラーメッセージの通りAssets/Plugins/Android/AndroidManifest.xmlmaxAspectRatioを追加して、ビルドしました。

<activity
    android:maxAspectRatio="2.4"> <!--2.4は適当-->
    ...
</activity>

ですが、変わらずmaxAspectRatio not foundと言われます。

これはmaxAspectRatio が、 API Level 26以上の時に使うパラメータだからです。

なので、Minimum API LevelTarget API Level26にします。
この設定にするとAndroidビルドに成功します!

そして、Oculus Questに apk をインストールすると・・・、

Failed parse during install package. Requires newer sdk version #26 (current version is #25)

インストールに失敗します。

これは、「デバイスの API Level が25なのに、アプリの要求API Level26以上」だからです。

では、API Level 25にないパラメータなのかというと、そういうわけでもないです。

API Level 25以前の場合はandroid.max_aspectを使用するように言われています。
なので、AndroidManifest.xmlandroid.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 Level25
Target API Level26
にしてビルドします。

こうすることで、ビルドに成功し、インストールも問題なくできました。

もちろん、apkをインストールし、問題なくアプリケーションが動作するところまで確認できました。

最後に

調べてもどこにも解決方法がなかったので、同じ現象で困っている方は是非試してみてください。
(Androidのお気持ちはわからない)

参考文献

画面サポートの制限の宣言 - Android developers

Special Thanks

Unityゲーム開発者ギルドのお二人。
Koji Hasegawa さん
やまだ たいし さん

転載元

【Unity】Androidビルドでエラー"maxAspectRatio not found" - EF Blog

Discussion