以下の内容はhttps://eorf.hatenablog.com/entry/2020/02/10/040831より取得しました。


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

前書き

お久しぶりです。EFです。
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 Level25なのに、アプリの要求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.

なぜか、最初のエラーがまた出ます・・・。


対処方法

結局、API Level 26以上に対応している、maxAspectRatioを追加します。

このままだとインストール時に失敗するので、Unityの設定で、
Minimum API Level25
Target API Level26
にしてビルドします。

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

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


最後に

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

Androidのお気持ちはわからない)


Special Thanks

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




以上の内容はhttps://eorf.hatenablog.com/entry/2020/02/10/040831より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14