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

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

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

גרסה 2023.1 ומעלה

הפעלת מעבד מקדים של Gradle build

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

הפעלת מעבד מקדים של Gradle build

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

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

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

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

הגדרת רמת ה-API המיועדת

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

‫2021.3.41f1 עד 2022.3

הפעלת מעבד מקדים של Gradle build

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

הפעלת מעבד מקדים של Gradle build

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

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

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

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

הגדרת רמת ה-API המיועדת

בתפריט הראשי, פותחים את Edit > Project Settings > Player > Android > Other Settings (עריכה > הגדרות הפרויקט > נגן > Android > הגדרות אחרות) ומגדירים את Target API Level (רמת ה-API המיועדת) ל-API Level 24 (רמת API‏ 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

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

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

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

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

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

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

הגדרת רמת ה-API המיועדת

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

ייצוא אל Android Studio

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

ייצוא פרויקט

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