إنشاء إصدارات متوافقة مع 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 من AR Foundation في ARCore Extensions for Unity
  • استهداف المستوى 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>