إنشاء إصدارات متوافقة مع 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 الإضافات لـ Unity's AR 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; مع تحديد خيارَي Gradle
Template

  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) الإصدار 6.1.1 من Gradle أو إصدار أحدث.

  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

إذا كان تطبيقك يستهدف الإصدار 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>