عند إنشاء مشروع على Android يستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31 من حزمة تطوير البرامج (SDK))، قد يظهر لك الخطأ التالي:
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
ويرجع ذلك إلى عدم التوافق بين الإصدار 31.0.0 من أدوات إنشاء Android ونظام إصدار Unity. بدءًا من الإصدار 31.0.0 من أدوات إنشاء Android، تمت إزالة DX لصالح D8، ما أدى إلى حدوث تعطُّل في إصدارات Unity لنظام التشغيل Android.
وقد يظهر هذا الخطأ في السيناريوهات التالية:
- الترقية إلى الإصدار 1.26 من ARCore متوفّرة للإصدار 1.26 من ARCore Foundation،
- استهداف المستوى 31 من حزمة تطوير البرامج (SDK) لنظام التشغيل Android في أي مشروع من مشاريع Unity، بغض النظر عن إصدار إضافات ARCore
- استهدف المستوى 30 من حزمة تطوير البرامج (SDK) لنظام التشغيل Android في أي مشروع من مشروعات Unity، أثناء تثبيت الإصدار 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 الإصدار 30.0.3 من Build-Tools وستستخدمها لإنشاء مشروعك مع الحفاظ على targetSdkVersion
المحدّدة.
إنشاء إصدارات مخصّصة من Gradle
في الإصدارات Unity 2019.4 و2020.1 و2020.2 التي تمّ إنشاؤها بإصدارات قديمة، عليك ضبط إصدار Gradle مخصّص على الإصدار 6.1.1 أو الإصدارات اللاحقة من Gradle. ستحتاج أيضًا إلى الإصدار 4.0.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو إصدار أحدث.
تتطلّب التطبيقات التي تستهدف الإصدار 31 من حزمة تطوير البرامج (SDK) إصدار Gradle 6.1.1 أو إصدار أحدث.
- انتقِل إلى Preferences > External Tools > Android > Gradle، واضبط إصدار Gradle المخصّص على الإصدار 6.1.1 من Gradle أو الإصدارات الأحدث. راجِع أداة إنشاء 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'
}
}
}
تطبيق التغييرات على التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android
إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android، يجب تعريف السمة 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-->
إضافة السمة
android:exported
إلى العلامة<activity>
:<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>