Unityビルドエラー『UnsupportedOperationException: This feature requires ASM7』

2023年1月13日

突然のビルドエラー

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なのかなと、と思います。