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

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

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

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

تفعيل المعالج الأوّلي لعملية إنشاء Gradle

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

تفعيل المعالج الأوّلي لعملية إنشاء Gradle

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

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

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

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

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

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

‫2021.3.41f1 إلى 2022.3

تفعيل المعالج الأوّلي لعملية إنشاء Gradle

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

تفعيل المعالج الأوّلي لعملية إنشاء Gradle

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

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

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

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

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

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

إضافة قائمة تجاهل 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 المخصّصة

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

من القائمة الرئيسية، افتح تعديل (Edit) > إعدادات المشروع (Project Settings) > المشغّل (Player) > نظام Android > إعدادات أخرى (Other Settings) واضبط مستوى واجهة برمجة التطبيقات المستهدف (Target API Level) على مستوى واجهة برمجة التطبيقات 35 (API Level 35) أو أعلى.

التصدير إلى "استوديو Android"

عدِّل إعدادات إصدار Android من خلال اختيار ملف (أو محرِّر Unity على نظام التشغيل MacOS) > إعدادات الإصدار وضَع علامة في المربّع "تصدير المشروع":

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

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

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

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

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

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

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

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

تعديل ملف 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 35
        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، وشغِّل المشروع.