Unity ile Android 12 için uygulama geliştirme

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 Derleme Araçları 31.0.0 sürümü ile Unity derleme sistemi arasındaki uyumsuzluktan kaynaklanmaktadır. Android Derleme Araçları sürümü 31.0.0'dan itibaren, DX kaldırılarak D8 kullanıma sunuldu. Bu durum, Android için Unity derlemelerinde soruna 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 Uzantıları sürümünden bağımsız olarak, herhangi bir Unity projesinde Android SDK düzeyi 31'i hedefleme
  • Derleme Araçları 31.0.0 sürümü yüklüyken, ARCore Uzantıları sürümü ne olursa olsun herhangi bir Unity projesinde Android SDK düzeyi 30 hedeflenir.

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şturmak için talimatları uygulayın:

  1. Project Settings > Player > Android > Publishing Settings > Build içinde şunların ikisini de seçin:

    1. Custom Main Gradle Template,
    2. Custom Launcher Gradle Template.

    Yayınlama Ayarları, Derleme bölmesinin her iki Gradle Şablonu
seçeneğini gösteren ekran görüntüsü

  2. Oluşturulan her iki dosyaya aşağıdaki değişiklikleri uygulayın:

    • Assets/Plugins/Android/mainTemplate.gradle
    • Assets/Plugins/Android/launcherTemplate.gradle

    Dosya varsa dosyanın en üstündeki şu yorumu kaldırın:

    // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
    

    Ardından compileSdkVersion ve buildToolsVersion öğelerini aşağıdaki gibi değiştirin:

    buildToolsVersion '30.0.3'
    

Unity, derleme sırasında Build-Tools'un 30.0.3 sürümünü indirir ve bu sürümü kullanarak projenizi oluştururken, seçili targetSdkVersion sürümünü korur.

Özel Gradle derlemeleri oluşturma

Eski sürümlerle oluşturulan Unity 2019.4, 2020.1 ve 2020.2 sürümlerinde özel bir Gradle derlemesini Gradle 6.1.1 veya sonraki bir sürümüne ayarlamanız gerekir. Ayrıca Android Gradle Plugin 4.0.1 veya sonraki bir sürüme ihtiyacınız olacaktır.

SDK 31'i hedefleyen uygulamalar için Gradle Sürüm 6.1.1 veya daha yeni bir sürüm gerekir.

  1. Preferences > External Tools > Android > Gradle adresine gidin ve özel Gradle derlemesini Gradle 6.1.1 veya sonraki bir sürümü olarak ayarlayın. İndirmeler için Gradle oluşturma aracını inceleyin.
  2. Oluşturulan her iki dosyaya 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 uygula

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'de davranış değişiklikleri başlıklı makaleyi inceleyin.

  1. Project Settings > Player > Android > Publishing Settings > Build içinde Custom Main Manifest uygulamasını seçin.

  2. Aşağıdaki değişiklikleri Assets/Plugins/Android/AndroidManifest.xml öğesine uygulayın:

    1. Dosya varsa dosyanın en üstündeki şu yorumu kaldırın:

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. <activity> etiketine android: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>