إنشاء إصدارات متوافقة مع Android 12 باستخدام Unity

عند إنشاء مشروع على 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:

  1. في Project Settings > Player > Android > Publishing Settings > Build، اختَر كليهما:

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

    لقطة شاشة تعرض &quot;إعدادات النشر&quot; و&quot;لوحة الإنشاء&quot; مع تحديد خيارَي 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 من 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 أو إصدار أحدث.

  1. انتقِل إلى Preferences > External Tools > Android > Gradle، واضبط إصدار Gradle المخصّص على الإصدار 6.1.1 من Gradle أو الإصدارات الأحدث. راجِع أداة إنشاء 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'
      }
   }
}

تطبيق التغييرات على التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android

إذا كان تطبيقك يستهدف الإصدار 12 من نظام التشغيل Android، يجب تعريف السمة 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. إضافة السمة 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>