Kotlin 2に起因するAndroidビルド失敗のトラブルシューティング
Unity 2022 LTS以前のバージョンでビルドするときにLevelPlay 9.6.0で導入されたKotlin 2の依存関係が原因で発生するAndroidビルド障害を特定して修正します。
読み終わるまでの所要時間 9 分最終更新 6日前
LevelPlay SDK 9.6.0でUnity 2022 LTS以前を使用している場合、Androidビルドに失敗する可能性があります。このガイドでは、それらを識別して解決する方法について説明します。
事象
LevelPlay Unity(Ads Mediation)パッケージを 9.6.0 にアップグレードすると、Android ビルドは以下のエラーで失敗します。
ノート:一部の入力ファイルは、非推奨の API を使用またはオーバーライドします。ノート:詳細は -Xlint:Deprecation で再コンパイルしてください。ERROR:D8: com.android.tools.r8.kotlin.HFAILURE (障害):ビルドは 2 回失敗して完了しました。1:タスクが例外で失敗しました。-----------* 何が問題になったか: タスク ':launcher:mergeExtDexRelease' の実行に失敗しました。> Could not resolve all files for configuration ':launcher:releaseRuntimeClasspath'.> Transform kotlin-stdlib-2.1.21.jar (org.jetbrains.kotlin:kotlin-stdlib:2.1.21) に失敗しました 属性 {artifactType=android-dex, ...} と一致させます。> DexingWithClasspathTransform の実行に失敗しました: .../transformed/jetified-kotlin-stdlib-2.1.21.jar.> デクス中のエラー。2:タスクが例外で失敗しました。-----------* 何が問題になったか: java.lang.StackOverflowError (エラーメッセージなし)ビルド失敗
このエラーメッセージから、これが Kotlin 2 の互換性の問題であることを示す 2 つのインジケーターが確認できます。
- 出力に行が表示されます。
ERROR:D8: com.android.tools.r8.kotlin.H - 失敗するアーティファクトは(または任意の
kotlin-stdlib-2.1.21.jar) です。Kotlin 2.x stdlib
原因
Android ビルド失敗は、以下の理由で発生する可能性があります。
- LevelPlay SDK 9.6.0 (およびそのネットワークアダプタの一部) は、Kotlin 2.x 標準ライブラリ () と依存関係にあります。
kotlin-stdlib-2.1.21 - Unity 2022 LTSには、Kotlin 2サポートより前のバージョンのAGP/R8がバンドルされています。バンドルされているD8/R8では、Kotlin 2のstdlibメタデータをデックスできません。これは、エラーおよびセカンダリ
D8: com.android.tools.r8.kotlin.Hとして表示されます。StackOverflowError
解決方法
この問題を解決するには、以下の手順に従ってにブロックを追加し、R8 をオーバーライドします。
settingsTemplate.gradlebuildscript- プロジェクトにファイルがまだない場合は、以下の手順で Unity エディターで有効にします。 a.File (ファイル)> ビルド設定 に移動します。 b.プラットフォームとして Android を選択し、プレイヤー設定を選択します。Project Settings ウィンドウが開きます。 c.Android 設定タブで、パブリッシャー設定に移動し、カスタム Gradle 設定テンプレートを有効にします。これにより、Unity は ARTIFACTORYREPOSITORY トークンと DIR_UNITYPROJECT トークンを使用して A
settingsTemplate.gradleにファイルを作成できます。ssets/Plugins/Android/settingsTemplate.gradle - Open 。
Assets/Plugins/Android/settingsTemplate.gradle - Google の R8 リリース Maven から R8 8.5.35 をプルする コードブロックを追加します。既存の
buildscriptコードブロックの直後に追加します。pluginManagement
pluginManagement { repositories { **アーティファクトリポジトリ** gradlePluginPortal() google() mavenCentral() }}buildscript { repositories { maven { url "https://storage.googleapis.com/r8-releases/raw" } } dependencies { classpath 'com.android.tools:r8:8.5.35' }}
以下のコード行は、Gradle が R8 8.5.35 ( をサポート) を強制的に解決してから、Android Gradle プラグインがバンドルされている古いバージョンを選択します。次に、タスクは新しい R8 を使用し、ビルドは正常に完了します。
Kotlin 2 stdlibmergeExtDexReleasebuildscript { dependencies { classpath 'com.android.tools:r8:...' } }
解像度の確認
- プロジェクトルートから以下のコマンドを実行して、開いている Gradle デーモンを閉じます。
または、以下を実行して Gradle 変換を削除できます。
./gradlew --stop.~/.gradle/caches/transforms-3/ - Unity エディターで、「ファイル」>「ビルド設定…」>「ビルド(リリース設定)」を選択します。
- タスクが完了し、APK または AAB が D8 エラーなしでビルドされることを確認します。
:launcher:mergeExtDexRelease
エラーが解消されない場合は、以下のください。
- ブロックが
buildscriptにあり、settingsTemplate.gradleまたはmainTemplate.gradleではないことを確認します。baseProjectTemplate.gradle - 他のテンプレートが古い R8 クラスパスを再導入していないことを確認します。
0- 以下のコマンドを使用して Gradle Transform キャッシュを消去し、リビルド:
rm -rf ~/.gradle/caches/transforms-3/