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

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

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

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

تفعيل أداة المعالجة المسبقة لإنشاء Gradle

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

تفعيل معالج Gradle المسبق

إعداد إعدادات Android وGradle يدويًا

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

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

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

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

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

الإصدارات من 2021.3.41f1 إلى 2022.3

تفعيل أداة المعالجة المسبقة لإنشاء Gradle

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

تفعيل معالج Gradle المسبق

إعداد إعدادات Android وGradle يدويًا

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

إذا لم يكن JDK 17 مثبّتًا، اختَر الخيار تنزيل JDK من شريط قائمة Gradle JDK ونزِّل إصدارًا متوافقًا. ننصح باستخدام JetBrains runtime vendor مع دعم 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 على استخدام Gradle 8.1.1 أو إصدار أحدث.

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