פיתוח גרסה של Unity ל-Android

גרסת Unity Editor נעולה לגרסה ספציפית של Gradle. בגרסאות קודמות של Unity Editor נעשה שימוש בגרסאות קודמות של Gradle שלא תואמות לגרסה האחרונה של Google Mobile Ads.

בטבלה הבאה מוצגת הגרסה המקסימלית של הפלאגין של Google Mobile Ads שתואמת לשימוש, בהתאם לגרסת Unity Editor שלכם:

Unity Editor גרסת הפלאגין של Google Mobile Ads ל-Unity
2023.1 ואילך החדש ביותר
2021.3.41f1 – 2022.3 9.1.0
2021.3.37f1 או גרסה ישנה יותר 8.5.3

אפשר לעדכן את Gradle באופן ידני כדי להשתמש בפלאגין העדכני ביותר של Google Mobile Ads ל-Unity, כולל גרסאות ישנות יותר של Unity Editors. כדי ליצור גרסה ל-Android, בוחרים את גרסת Unity Editor המועדפת:

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שיש לכם את הפריטים הבאים:

הפעלת תבניות Gradle בהתאמה אישית

עוברים אל Project Settings (הגדרות הפרויקט)‏ > Player (נגן)‏ > Android (Android)‏ > Publishing Settings (הגדרות פרסום)‏ > Build (גרסה) ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

הפעלת תבניות Gradle בהתאמה אישית

הגדרת רמת ה-API לטירגוט 34

בתפריט הראשי, פותחים את Edit (עריכה) > Project Settings (הגדרות הפרויקט) > Player (נגן) > Android (Android) > Other Settings (הגדרות אחרות) ומגדירים את Target API Level (רמת ה-API לטירגוט) ל-API Level 34 ומעלה.

הגדרת רמת ה-API לטירגוט

הפעלת הפרויקט ל-Android

ב-Android Studio, מריצים את gradle sync ומריצים את הפרויקט.

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שיש לכם את הפריטים הבאים:

  • מורידים ומתקינים את הגרסה היציבה האחרונה של Android Studio.

הפעלת תבניות Gradle בהתאמה אישית

עוברים אל Project Settings (הגדרות הפרויקט)‏ > Player (נגן)‏ > Android (Android)‏ > Publishing Settings (הגדרות פרסום)‏ > Build (גרסה) ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

הפעלת תבניות Gradle בהתאמה אישית

הגדרת רמת ה-API לטירגוט 34

בתפריט הראשי, פותחים את Edit (עריכה) > Project Settings (הגדרות הפרויקט) > Player (נגן) > Android (Android) > Other Settings (הגדרות אחרות) ומגדירים את Target API Level (רמת ה-API לטירגוט) ל-API Level 34 ומעלה.

הגדרת רמת ה-API לטירגוט

ייצוא ל-Android Studio

כדי לשנות את הגדרות ה-build של Android, בוחרים באפשרות File (קובץ) (או Unity Editor ב-MacOS)‏ > Build Settings ומסמנים את האפשרות Export Project (ייצוא הפרויקט):

ייצוא פרויקט

פתיחת Android Studio

הקטע הזה מכיל שלבים שמבצעים ב-Android Studio.

עדכון ההגדרה של Gradle JDK

פותחים את הגדרות Gradle בקטע File (או Android Studio ב-MacOS)‏ > Settings‏ > Build‏ > Execution‏ > Deployment‏ > Build Tools‏ > Gradle. מאתרים את התפריט הנפתח Gradle JDK ומגדירים את Gradle JDK להשתמש ב-JDK 17 ואילך.

עדכון ההגדרה של Gradle JDK

אם גרסת JDK 17 לא מותקנת, בוחרים באפשרויות Download JDK בסרגל התפריטים של Gradle JDK ומורידים גרסה תואמת. מומלץ להשתמש בספק של זמן הריצה של JetBrains עם תמיכה ב-aarch64, בהתאם למה שמופץ ב-Android Studio.

עדכון 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

הפעלת הפרויקט ל-Android

ב-Android Studio, מריצים את gradle sync ומריצים את הפרויקט.

דרישות מוקדמות

לפני שממשיכים, חשוב לוודא שיש לכם את הפריטים הבאים:

  • מורידים ומתקינים את הגרסה היציבה האחרונה של Android Studio.

הפעלת תבניות Gradle בהתאמה אישית

עוברים אל Project Settings (הגדרות הפרויקט)‏ > Player (נגן)‏ > Android (Android)‏ > Publishing Settings (הגדרות פרסום)‏ > Build (גרסה) ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

הפעלת תבניות Gradle בהתאמה אישית

הגדרת רמת ה-API לטירגוט 34

בתפריט הראשי, פותחים את Edit (עריכה) > Project Settings (הגדרות הפרויקט) > Player (נגן) > Android (Android) > Other Settings (הגדרות אחרות) ומגדירים את Target API Level (רמת ה-API לטירגוט) ל-API Level 34 ומעלה.

הגדרת רמת ה-API לטירגוט

ייצוא ל-Android Studio

כדי לשנות את הגדרות ה-build של Android, בוחרים באפשרות File (קובץ) (או Unity Editor ב-MacOS)‏ > Build Settings ומסמנים את האפשרות Export Project (ייצוא הפרויקט):

ייצוא פרויקט

אם מופיעה אזהרה על כך שחסרה גרסה 34 של Android SDK platform API, בוחרים באפשרות 'Update Android SDK'.

פתיחת Android Studio

הקטע הזה מכיל שלבים שמבצעים ב-Android Studio.

עדכון ההגדרה של Gradle JDK

פותחים את הגדרות Gradle בקטע File (או Android Studio ב-MacOS)‏ > Settings‏ > Build‏ > Execution‏ > Deployment‏ > Build Tools‏ > Gradle. מאתרים את התפריט הנפתח Gradle JDK ומגדירים את Gradle JDK להשתמש ב-JDK 17 ואילך.

עדכון ההגדרה של Gradle JDK

אם גרסת JDK 17 לא מותקנת, בוחרים באפשרויות Download JDK בסרגל התפריטים של Gradle JDK ומורידים גרסה תואמת. מומלץ להשתמש בספק של זמן הריצה של JetBrains עם תמיכה ב-aarch64, בהתאם למה שמופץ ב-Android Studio.

עדכון 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 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: ['.jar'])
    implementation fileTree(dir: 'libs', include: ['.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 Studio, מריצים את gradle sync ומריצים את הפרויקט.