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's AR Foundation के 1.26 वर्शन के लिए, ARCore एक्सटेंशन पर अपग्रेड करना
- ARCore एक्सटेंशन के वर्शन के बावजूद, किसी भी यूनिटी प्रोजेक्ट में Android SDK लेवल 31 को टारगेट करना
- ARCore एक्सटेंशन के वर्शन पर ध्यान दिए बिना, बिल्ड टूल का 31.0.0 वर्शन इंस्टॉल किए जाने के दौरान, किसी भी यूनिटी प्रोजेक्ट में Android SDK लेवल 30 को टारगेट किया जाता है.
समाधान
इस समस्या को हल करने के लिए, हम Unity के साथ काम कर रहे हैं. इस दौरान, Android 12 को टारगेट करने वाला प्रोजेक्ट बनाने के लिए, निर्देशों का पालन करें:
Project Settings > Player > Android > Publishing Settings > Build में, ये दोनों चुनें:
- Custom Main Gradle Template,
- Custom Launcher Gradle Template.
जनरेट की गई दोनों फ़ाइलों पर ये बदलाव लागू करें:
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 बिल्ड को Gradle के वर्शन 6.1.1 या इसके बाद के वर्शन पर सेट करना ज़रूरी है. आपको Android Gradle प्लग इन 4.0.1 या इसके बाद वाले वर्शन की भी ज़रूरत होगी.
SDK टूल 31 को टारगेट करने वाले ऐप्लिकेशन के लिए, Gradle के 6.1.1 या इसके बाद के वर्शन की ज़रूरत होती है.
- Preferences > External Tools > Android > Gradle पर जाएं और कस्टम Gradle बिल्ड को Gradle 6.1.1 या इसके बाद के वर्शन पर सेट करें. डाउनलोड के लिए Gradle बिल्ड टूल देखें.
जनरेट की गई दोनों फ़ाइलों पर ये बदलाव लागू करें:
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 में व्यवहार में हुए बदलाव देखें.
Project Settings > Player > Android > Publishing Settings > Build में, Custom Main Manifest चुनें.
Assets/Plugins/Android/AndroidManifest.xml
पर ये बदलाव लागू करें:अगर यह मौजूद है, तो फ़ाइल के सबसे ऊपर मौजूद इस टिप्पणी को हटाएं:
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<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>