Unity के साथ Android 12 के लिए बना डिवाइस

Android 12 (SDK टूल लेवल 31) को टारगेट करने वाला Android प्रोजेक्ट बनाते समय, आपको यह गड़बड़ी दिख सकती है:

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

ऐसा इसलिए होता है, क्योंकि Android बिल्ड टूल के वर्शन 31.0.0 और Unity बिल्ड सिस्टम के साथ काम नहीं करता. Android बिल्ड टूल के वर्शन 31.0.0 के बाद, DX को D8 की जगह हटा दिया गया. इस वजह से, Android के लिए Unity बिल्ड में रुकावट आ रही है.

यह गड़बड़ी इन स्थितियों में ट्रिगर हो सकती है:

  • Unity के AR Foundation के 1.26 वर्शन के लिए ARCore एक्सटेंशन पर अपग्रेड करना,
  • किसी भी Unity प्रोजेक्ट में Android SDK के लेवल 31 को टारगेट करना, भले ही ARCore एक्सटेंशन का वर्शन कोई भी हो,
  • किसी भी Unity प्रोजेक्ट में Android SDK के लेवल 30 को टारगेट करना, जबकि बिल्ड टूल का वर्शन 31.0.0 इंस्टॉल होना चाहिए. भले ही, ARCore एक्सटेंशन का वर्शन कोई भी हो.

समाधान

हम Unity के साथ काम कर रहे हैं, ताकि सिस्टम के साथ काम न कर पाने की समस्या को ठीक किया जा सके. इस बीच, Android 12 को टारगेट करने वाला प्रोजेक्ट बनाने के लिए निर्देशों का पालन करें:

  1. Project Settings > Player > Android > Publishing Settings > Build में, दोनों चुनें:

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

    पब्लिशिंग सेटिंग दिखाने वाला स्क्रीनशॉट, जिसमें Gradle टेंप्लेट के दोनों
विकल्प चुने गए हैं और बिल्ड पैनल

  2. जनरेट की गई दोनों फ़ाइलों पर ये बदलाव लागू करें:

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

    अगर यह टिप्पणी मौजूद है, तो फ़ाइल में सबसे ऊपर दी गई इस टिप्पणी को हटाएं:

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

    इसके बाद, compileSdkVersion और buildToolsVersion में इस तरह बदलाव करें:

    buildToolsVersion '30.0.3'
    

इमारत बनाते समय Unity, बिल्ड-टूल का 30.0.3 वर्शन डाउनलोड करेगा और आपके प्रोजेक्ट को बनाने के लिए इसका इस्तेमाल करेगा. साथ ही, चुने गए targetSdkVersion में भी इसका इस्तेमाल जारी रखेगा.

पसंद के मुताबिक Gradle बिल्ड बनाएं

Unity के पुराने वर्शन 2019.4, 2020.1, और 2020.2 वाले वर्शन पर, आपको कस्टम ग्रेडल बिल्ड को gradle वर्शन 6.1.1 या इसके बाद के वर्शन पर सेट करना होगा. आपको Android Gradle प्लगिन 4.0.1 या इसके बाद के वर्शन की भी ज़रूरत होगी.

SDK टूल 31 को टारगेट करने वाले ऐप्लिकेशन के लिए, gradle वर्शन 6.1.1 या इसके बाद का वर्शन ज़रूरी है.

  1. Preferences > External Tools > Android > Gradle पर जाएं और कस्टम Gradle बिल्ड को gradle 6.1.1 या इसके बाद के वर्शन पर सेट करें. डाउनलोड करने के लिए, gradle बिल्ड टूल देखें.
  2. जनरेट की गई दोनों फ़ाइलों पर ये बदलाव लागू करें:

    • 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 को टारगेट करने वाले ऐप्लिकेशन में बदलाव लागू करें

अगर आपका ऐप्लिकेशन, Android 12 को टारगेट करता है, तो आपको android:exported एट्रिब्यूट के बारे में साफ़ तौर पर बताना होगा. Android 12 में हुए सभी बदलावों के बारे में जानने के लिए, Android 12 में व्यवहार में होने वाले बदलाव लेख पढ़ें.

  1. Project Settings > Player > Android > Publishing Settings > Build में जाकर, Custom Main Manifest चुनें.

  2. Assets/Plugins/Android/AndroidManifest.xml पर ये बदलाव लागू करें:

    1. अगर यह टिप्पणी मौजूद है, तो फ़ाइल में सबसे ऊपर दी गई इस टिप्पणी को हटाएं:

      <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
      
    2. <activity> टैग में android:exported एट्रिब्यूट जोड़ें:

       <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>