إنشاء حزمة Unity لنظام التشغيل Android

إنّ Unity Editor مقفل على إصدار معيّن من Gradle. تستخدِم الإصدارات السابقة من Unity Editor إصدارات سابقة من Gradle غير متوافقة مع أحدث إصدار من "إعلانات Google على الأجهزة الجوّالة".

لإنشاء تطبيق Android، اختَر إصدار Unity Editor المفضّل لديك:

‫2023.1 أو إصدار أحدث

تفعيل معالج ما بعد الإنشاء في Gradle

يكون معالج ما بعد الإنشاء في Gradle مفعَّلاً تلقائيًا في الإصدار 2021.3.41f1 والإصدارات الأحدث من Unity Editor. يطبّق المعالج تلقائيًا جميع إعدادات Gradle وإعدادات المشغّل اللازمة لتوافق أحدث إصدار من حزمة تطوير البرامج "SDK لإعلانات Google على الأجهزة الجوّالة" مع الإصدارات السابقة من Unity Editor.

تفعيل معالج ما بعد الإنشاء في Gradle

ضبط إعدادات Android وGradle يدويًا

تفعيل نماذج Gradle المخصّصة

انتقِل إلى إعدادات المشروع > المشغّل > Android > إعدادات النشر > الإنشاء وفعِّل Custom Main Gradle Template وCustom Gradle Properties Template.

تفعيل نماذج Gradle المخصّصة

ضبط مستوى واجهة برمجة التطبيقات المستهدَف على 34

من القائمة الرئيسية، افتح تعديل > إعدادات المشروع > المشغّل > Android > إعدادات أخرى واضبط مستوى واجهة برمجة التطبيقات المستهدَف على المستوى 34 لواجهة برمجة التطبيقات أو مستوى أعلى.

ضبط مستوى واجهة برمجة التطبيقات المستهدَف

‫2021.3.41f1 - 2022.3

تفعيل معالج ما بعد الإنشاء في Gradle

يكون معالج ما بعد الإنشاء في Gradle مفعَّلاً تلقائيًا في الإصدار 2021.3.41f1 والإصدارات الأحدث من Unity Editor. يطبّق المعالج تلقائيًا جميع إعدادات Gradle وإعدادات المشغّل اللازمة لتوافق أحدث إصدار من حزمة تطوير البرامج "SDK لإعلانات Google على الأجهزة الجوّالة" مع الإصدارات السابقة من Unity Editor.

تفعيل معالج ما بعد الإنشاء في Gradle

ضبط إعدادات Android وGradle يدويًا

تفعيل نماذج Gradle المخصّصة

انتقِل إلى إعدادات المشروع > المشغّل > Android > إعدادات النشر > الإنشاء وفعِّل Custom Main Gradle Template وCustom Gradle Properties Template.

تفعيل نماذج Gradle المخصّصة

ضبط مستوى واجهة برمجة التطبيقات المستهدَف على 34

من القائمة الرئيسية، افتح تعديل > إعدادات المشروع > المشغّل > Android > إعدادات أخرى واضبط مستوى واجهة برمجة التطبيقات المستهدَف على المستوى 34 لواجهة برمجة التطبيقات أو مستوى أعلى.

ضبط مستوى واجهة برمجة التطبيقات المستهدَف

إضافة قائمة التجاهل في Jetifier إلى ملف `gradleTemplate.properties`

عدِّل Assets/Plugins/Android/gradleTemplate.properties وأضِف السطر التالي:

  android.jetifier.ignorelist=annotation-experimental-1.4.0.aar

إزالة `minSDKVersion` من `AndroidManifest.xml`

عدِّل Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml وأزِل android:minSdkVersion="21" من عقدة uses-sdk . يجب أن يبدو AndroidManifest.xml على النحو التالي:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.unity.ads"
    android:versionName="1.0"
    android:versionCode="1">
  <uses-sdk />
  <application>
    <uses-library android:required="false" android:name="org.apache.http.legacy"/>
  </application>
</manifest>

‫2019.4 - 2021.3.37f1

المتطلبات الأساسية

قبل المتابعة، تأكَّد من توفّر ما يلي:

تفعيل نماذج Gradle المخصّصة

انتقِل إلى إعدادات المشروع > المشغّل > Android > إعدادات النشر > الإنشاء وفعِّل Custom Main Gradle Template وCustom Gradle Properties Template.

تفعيل نماذج Gradle المخصّصة

ضبط مستوى واجهة برمجة التطبيقات المستهدَف على 34

من القائمة الرئيسية، افتح تعديل > إعدادات المشروع > المشغّل > Android > إعدادات أخرى واضبط مستوى واجهة برمجة التطبيقات المستهدَف على المستوى 34 لواجهة برمجة التطبيقات أو مستوى أعلى.

ضبط مستوى واجهة برمجة التطبيقات المستهدَف

التصدير إلى Android Studio

عدِّل إعدادات إصدار Android من خلال النقر على ملف (File) (أو Unity Editor على نظام التشغيل MacOS) > إعدادات الإصدار (Build Settings) ووضع علامة في مربّع "تصدير المشروع" (Export Project):

تصدير المشروع

إذا تلقّيت تحذيرًا بأنّ مستوى واجهة برمجة التطبيقات 34 لمنصة حزمة تطوير البرامج (SDK) لنظام التشغيل Android غير متوفّر، اختَر الخيار تحديث حزمة تطوير البرامج (SDK) لنظام التشغيل Android.

فتح "استوديو Android"

يحتوي هذا القسم على خطوات يتم تنفيذها في "استوديو Android".

تعديل إعدادات Gradle JDK

افتح إعدادات Gradle من خلال ملف (أو "استوديو Android" على نظام التشغيل macOS) > الإعدادات > الإنشاء > التنفيذ > النشر > أدوات الإنشاء > Gradle. ابحث عن القائمة المنسدلة Gradle JDK واضبطها على استخدام الإصدار 17 أو إصدار أحدث من JDK.

تعديل إعدادات Gradle JDK

إذا لم يكن لديك الإصدار 17 من JDK مثبّتًا، اختَر الخيار تنزيل JDK من شريط قائمة Gradle JDK ونزِّل إصدارًا متوافقًا. ننصح باستخدام موفّر JetBrains runtime الذي يتوافق مع aarch64، وذلك ليتوافق مع ما يوزّعه &quot;استوديو Android&quot;.

تعديل ملف build.gradle على مستوى المشروع

اضبط إصدار أدوات Gradle على 8.1.1 أو إصدار أحدث.

plugins {
    id 'com.android.application' version '8.1.1' apply false
    id 'com.android.library' version '8.1.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

تعديل "/gradle/gradle-wrapper.properties"

اضبط distributionUrl لاستخدام الإصدار 8.1.1 من Gradle أو إصدار أحدث.

distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip

تعديل "launcher/build.gradle"

  • اضبط السمة namespace باستخدام قيمة السمة package من launcher/AndroidManifest.xml
  • ضبط sourceCompatibility وtargetCompatibility على Java 17
apply plugin: 'com.android.application'

dependencies {
    implementation project(':unityLibrary')
}

android {
    namespace "com.google.android.gms.example"
    compileSdkVersion 35
    buildToolsVersion '35.0.0'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    defaultConfig {
        minSdkVersion 28
        targetSdkVersion 35
        applicationId 'com.google.android.gms.example'
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
        versionCode 1
        versionName '1.0'
    }

    aaptOptions {
        noCompress = ['.unity3d', '.ress', '.resource', '.obb', '.bundle', '.unityexp']
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.debug
            jniDebuggable true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt')
            signingConfig signingConfigs.debug
        }
    }

    packagingOptions {
        doNotStrip '*/armeabi-v7a/*.so'
        doNotStrip '*/arm64-v8a/*.so'
        doNotStrip '*/x86/*.so'
        doNotStrip '*/x86_64/*.so'
        jniLibs {
            useLegacyPackaging true
        }
    }

    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = true
        }
    }
}

apply from: '../unityLibrary/GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'

تعديل settings.gradle على مستوى المشروع

اضبط القسمَين pluginManagement وdependencyResolutionManagement.

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

include ':launcher', ':unityLibrary'
include 'unityLibrary:GoogleMobileAdsPlugin.androidlib'

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {

        google()
        mavenCentral()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
    }
}

تعديل unityLibrary/build.gradle

  • ضبط namespace بالقيمة "com.unity3d.player"
  • ضبط sourceCompatibility وtargetCompatibility على JavaVersion.VERSION_17
    apply plugin: 'com.android.library'

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        // Android Resolver Dependencies Start
        implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
        implementation 'com.google.android.gms:play-services-ads:23.6.0'
        implementation 'com.google.android.ump:user-messaging-platform:3.1.0'
        // Android Resolver Dependencies End
        implementation(name: 'googlemobileads-unity', ext:'aar')
        implementation project('GoogleMobileAdsPlugin.androidlib')
    }

    // Android Resolver Exclusions Start
    android {
      packagingOptions {
          exclude ('/lib/armeabi/*' + '*')
          exclude ('/lib/mips/*' + '*')
          exclude ('/lib/mips64/*' + '*')
          exclude ('/lib/x86/*' + '*')
      }
    }
    // Android Resolver Exclusions End

    android {
        namespace "com.unity3d.player"
        compileSdkVersion 34
        buildToolsVersion '30.0.2'

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
        }

        defaultConfig {
            minSdkVersion 28
            targetSdkVersion 34
            ndk {
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
            }
            versionCode 1
            versionName '1.0'
            consumerProguardFiles 'proguard-unity.txt'
        }

        lintOptions {
            abortOnError false
        }

        aaptOptions {
            ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
        }

        packagingOptions {
            doNotStrip '*/armeabi-v7a/*.so'
            doNotStrip '*/arm64-v8a/*.so'
            doNotStrip '*/x86_64/*.so'
        }
    }


    apply from: 'GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'
    gradle.projectsEvaluated { apply from: 'GoogleMobileAdsPlugin.androidlib/validate_dependencies.gradle' }

تعديل unity/Library/GoogleMobileAdsPlugin.androidlib/build.gradle

اضبط السمة namespace على القيمة "com.google.unity.ads".

apply plugin: 'android-library'

dependencies {
    implementation fileTree(dir: 'bin', include: ['<em>.jar'])
    implementation fileTree(dir: 'libs', include: ['</em>.jar'])
}

android {
    namespace "com.google.unity.ads"
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            //java.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }
    }

    compileSdkVersion 34
    buildToolsVersion '30.0.2'
    defaultConfig {
        targetSdkVersion 31
    }

    lintOptions {
        abortOnError false
    }
}

تشغيل مشروع Android

من "استوديو Android"، نفِّذ عملية مزامنة Gradle، ثم نفِّذ المشروع.