Unityビルドエラー『UnsupportedOperationException: This feature requires ASM7』
突然のビルドエラー
Android向けにビルドをしようとしたところ、突然エラーが発生しました…
android:exported UnityPlayerActivity.javaは非推奨のAPIを使用またはオーバーライドしています。注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
CommandInvokationFailure: Gradle build failed.
error processing googlemobileads-unity-runtime.jar
java.lang.UnsupportedOperationException: This feature requires ASM7
at org.objectweb.asm.ClassVisitor.visitNestHost(ClassVisitor.java:150)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:541)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':launcher:dexBuilderRelease'.
> java.lang.UnsupportedOperationException: This feature requires ASM7
* 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 3s
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
いろいろ修正してたので、何に影響されたか思い当たらず…
エラーの内容から、AdmobSDKをアップデートした影響なのか、もしくはAndroidManifest.xmlに記載した「android:exported="true"」の影響なのか…
ただ、AdmobSDKはv7.3.0にしてから一度ビルド成功してるので、違うかなと思いつつ…
対応法
- Unity 2020.3.30f1
- GoogleMobileAds-v7.3.1
- Target API Level 31
上記の環境で発生。
上記のサイトから、Gradleのミスマッチが原因かと思い、最新をダウロード(https://gradle.org/releases/)してパスを当てましたが、上手く行かず…
それに、何となくですが、これが原因ではない感じもしたので、別途調査しました。
> Configure project :launcher
WARNING: The option setting 'android.enableR8=false' is deprecated.
It will be removed in version 5.0 of the Android Gradle plugin.
You will no longer be able to disable R8
上記ログのdeprecatedとなってる部分を調査しました。
非推奨のAPIを利用してるのが根本的な原因となっているようで、これを調査すると、Minimum API Levelを上げと対応できるらしく、実施してみました。
「Android 4.4 ‘KitKat'(API level 19)」→「Android 7.0 ‘Nougat'(API level 24)」
APIレベルを24に変更したことで、ビルド成功しました。
まさか、Minimum API Levelが影響してるとは…😥
非推奨のAPIということで、やはり原因は最新のAdmobSDKなのかなと、と思います。