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 Build Tools के 31.0.0 वर्शन और Unity के बिल्ड सिस्टम के बीच काम करने में समस्या आती है. Android Build Tools के 31.0.0 वर्शन में, D8 के पक्ष में DX को हटा दिया गया है. इस वजह से, Android के लिए Unity बिल्ड में रुकावट आ रही है.
यह गड़बड़ी इन स्थितियों में ट्रिगर हो सकती है:
- Unity के AR Foundation के वर्शन 1.26 के लिए, ARCore एक्सटेंशन में अपग्रेड करना,
- किसी भी Unity प्रोजेक्ट में Android SDK टूल लेवल 31 को टारगेट करना. भले ही, ARCore एक्सटेंशन का कोई भी वर्शन इस्तेमाल किया जा रहा हो,
- किसी भी Unity प्रोजेक्ट में Android SDK लेवल 30 को टारगेट करना. इसके लिए, Build Tools का 31.0.0 वर्शन इंस्टॉल होना ज़रूरी है. भले ही, ARCore एक्सटेंशन का कोई भी वर्शन इस्तेमाल किया जा रहा हो.
समस्या हल करने का तरीका
हम 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, Build-Tools का वर्शन 30.0.3 डाउनलोड करेगा. साथ ही, चुने गए targetSdkVersion
को बनाए रखते हुए, आपके प्रोजेक्ट को बनाने के लिए इसका इस्तेमाल करेगा.
कस्टम Gradle बिल्ड बनाना
Unity के 2019.4, 2020.1, और 2020.2 वर्शन, पुराने वर्शन के साथ बनाए गए हैं. इन पर, आपको Gradle के 6.1.1 या उसके बाद के वर्शन के लिए कस्टम Gradle बिल्ड सेट करना होगा. इसके लिए, आपके पास 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>