Android 12'yi (SDK düzeyi 31) hedefleyen bir Android projesi oluştururken aşağıdaki hatayla karşılaşabilirsiniz:
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
Bu durum, Android Build Tools 31.0.0 sürümü ile Unity derleme sistemi arasındaki uyumsuzluktan kaynaklanmaktadır. Android Derleme Araçları 31.0.0 sürümü itibarıyla DX, D8'in lehine kaldırıldı. Bu durum, Android için Unity derlemelerinde kesintilere neden oldu.
Bu hata aşağıdaki senaryolarda tetiklenebilir:
- Unity'nin AR Foundation 1.26 sürümü için ARCore uzantılarına yükseltme,
- ARCore Extensions sürümünden bağımsız olarak herhangi bir Unity projesinde Android SDK düzeyi 31'i hedefleme,
- ARCore Uzantılar sürümünden bağımsız olarak, Derleme Araçları 31.0.0 sürümü yüklüyken herhangi bir Unity projesinde Android SDK düzeyi 30'u hedefleme.
Geçici çözüm
Bu uyumsuzluğu çözmek için Unity ile birlikte çalışıyoruz. Bu sırada, Android 12'yi hedefleyen bir proje oluşturma talimatlarını uygulayın:
Project Settings > Player > Android > Publishing Settings > Build bölümünde ikisini de seçin:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
Oluşturulan her iki dosyaya da aşağıdaki değişiklikleri uygulayın:
Assets/Plugins/Android/mainTemplate.gradle
Assets/Plugins/Android/launcherTemplate.gradle
Varsa dosyanın üst kısmındaki aşağıdaki yorumu kaldırın:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
Ardından
compileSdkVersion
vebuildToolsVersion
değerlerini aşağıdaki gibi değiştirin:buildToolsVersion '30.0.3'
Unity, derleme sırasında Build-Tools 30.0.3 sürümünü indirir ve seçili targetSdkVersion
'yi korurken projenizi derlemek için kullanır.
Özel Gradle derlemeleri oluşturma
Daha eski sürümlerle oluşturulan 2019.4, 2020.1 ve 2020.2 Unity sürümlerinde özel Gradle derlemesini Gradle 6.1.1 veya sonraki bir sürüme ayarlamanız gerekir. Ayrıca Android Gradle Eklentisi 4.0.1 veya sonraki bir sürüme de ihtiyacınız vardır.
SDK 31'i hedefleyen uygulamalar için Gradle 6.1.1 veya sonraki bir sürüm gerekir.
- Preferences > External Tools > Android > Gradle adresine gidin ve özel Gradle derlemesini Gradle 6.1.1 veya sonraki bir sürüme ayarlayın. İndirme işlemleri için Gradle derleme aracı başlıklı makaleyi inceleyin.
Oluşturulan her iki dosyaya da aşağıdaki değişiklikleri uygulayın:
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'
}
}
}
Android 12'yi hedefleyen uygulamalar için değişiklikleri uygulama
Uygulamanız Android 12'yi hedefliyorsa android:exported
özelliğini açıkça beyan etmeniz gerekir. Android 12'deki tüm değişiklikler için Android 12'deki davranış değişiklikleri başlıklı makaleyi inceleyin.
Project Settings > Player > Android > Publishing Settings > Build bölümünde Custom Main Manifest'i seçin.
Assets/Plugins/Android/AndroidManifest.xml
kampanyasına aşağıdaki değişiklikleri uygulayın:Varsa dosyanın üst kısmındaki aşağıdaki yorumu kaldırın:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<activity>
etiketineandroid:exported
özelliğini ekleyin:<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>