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

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

כדי ליצור Android, בוחרים את הגרסה המועדפת של Unity Editor:

גרסה 2023.1 ואילך

הפעלת מעבד פוסט לבניית Gradle

מעבד הפוסט של Gradle build מופעל כברירת מחדל ב-Unity Editor מגרסה 2021.3.41f1 ואילך. המעבד מחיל באופן אוטומטי את כל ההגדרות הנדרשות של Gradle ושל הנגן כדי לתמוך בגרסאות קודמות של Unity Editor עם Google Mobile Ads SDK העדכני.

הפעלת מעבד פוסט לבניית Gradle

הגדרה ידנית של הגדרות Android ו-Gradle

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

עוברים אל Project Settings > Player > Android > Publishing Settings > Build ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

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

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

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

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

‫2021.3.41f1 עד 2022.3

הפעלת מעבד פוסט לבניית Gradle

מעבד הפוסט של Gradle build מופעל כברירת מחדל ב-Unity Editor מגרסה 2021.3.41f1 ואילך. המעבד מחיל באופן אוטומטי את כל ההגדרות הנדרשות של Gradle ושל הנגן כדי לתמוך בגרסאות קודמות של Unity Editor עם Google Mobile Ads SDK העדכני.

הפעלת מעבד פוסט לבניית Gradle

הגדרה ידנית של הגדרות Android ו-Gradle

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

עוברים אל Project Settings > Player > Android > Publishing Settings > Build ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

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

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

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

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

הוספת רשימת קטעי הקוד להתעלמות של 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

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

לפני שממשיכים, חשוב לוודא שיש לכם:

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

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

עוברים אל Project Settings > Player > Android > Publishing Settings > Build ומפעילים את Custom Main Gradle Template ואת Custom Gradle Properties Template.

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

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

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

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

ייצוא אל Android Studio

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

ייצוא פרויקט

אם מוצגת אזהרה על כך שחסר Android SDK platform API ברמה 34, בוחרים באפשרות 'עדכון 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: ['<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 Studio, מריצים סנכרון של Gradle ומריצים את הפרויקט.