Saat mem-build project Android yang menargetkan Android 12 (level SDK 31), Anda mungkin mengalami error berikut:
Could not determine the dependencies of task ':launcher:compileDebugJavaWithJavac'.
> Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
> Configure project :launcher
WARNING: The option 'android.enableR8' is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
File ~/.android/repositories.cfg could not be loaded.
Build-tool 31.0.0 is missing DX at <android-sdk-path>/sdk/build-tools/31.0.0/dx
Hal ini disebabkan oleh inkompatibilitas antara Android Build Tools versi 31.0.0 dan sistem build Unity. Mulai Android Build Tools versi 31.0.0, DX telah dihapus dan digantikan dengan D8, yang menyebabkan kerusakan pada build Unity untuk Android.
Error ini dapat dipicu dalam skenario berikut:
- Mengupgrade ke ARCore Extensions untuk AR Foundation Unity versi 1.26,
- Menargetkan Android SDK level 31 di project Unity apa pun, terlepas dari versi Ekstensi ARCore,
- Menargetkan Android SDK level 30 di project Unity apa pun saat Build Tools versi 31.0.0 diinstal, terlepas dari versi Ekstensi ARCore.
Solusi
Kami sedang bekerja sama dengan Unity untuk mengatasi inkompatibilitas ini. Sementara itu, ikuti petunjuk untuk mem-build project yang menargetkan Android 12:
Di Project Settings > Player > Android > Publishing Settings > Build, pilih keduanya:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Terapkan perubahan berikut ke kedua file yang dihasilkan:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Jika ada, hapus komentar berikut di bagian atas file:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
Kemudian, ubah
compileSdkVersion
danbuildToolsVersion
sebagai berikut:buildToolsVersion '30.0.3'
Saat mem-build, Unity akan mendownload Build-Tools versi 30.0.3 dan menggunakannya untuk mem-build project Anda sambil mempertahankan targetSdkVersion
yang dipilih.
Membuat build Gradle kustom
Pada Unity versi 2019.4, 2020.1, dan 2020.2, yang dibuat dengan versi yang lebih lama, Anda perlu menetapkan build Gradle kustom ke Gradle versi 6.1.1 atau yang lebih baru. Anda juga memerlukan Plugin Android Gradle 4.0.1 atau yang lebih baru.
Aplikasi yang menargetkan SDK 31 memerlukan Gradle Versi 6.1.1 atau yang lebih baru.
- Buka Preferences > External Tools > Android > Gradle, lalu tetapkan build Gradle kustom ke Gradle 6.1.1 atau yang lebih baru. Lihat Alat build Gradle untuk mendownload.
Terapkan perubahan berikut ke kedua file yang dihasilkan:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Must be Android Gradle Plugin 4.0.1 or later. For a list of
// compatible Gradle versions refer to:
// https://developer.android.com/studio/releases/gradle-plugin
classpath 'com.android.tools.build:gradle:4.0.1'
}
}
allprojects {
repositories {
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
Menerapkan perubahan untuk aplikasi yang menargetkan Android 12
Jika aplikasi Anda menargetkan Android 12, Anda harus mendeklarasikan atribut android:exported
secara eksplisit. Untuk semua perubahan di Android 12, lihat Perubahan perilaku di Android 12.
Di Project Settings > Player > Android > Publishing Settings > Build, pilih Custom Main Manifest.
Terapkan perubahan berikut ke
Assets/Plugins/Android/AndroidManifest.xml
:Jika ada, hapus komentar berikut di bagian atas file:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
Tambahkan atribut
android:exported
ke tag<activity>
:<application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application>