פיתוח גרסה של 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 ושל הנגן כדי לתמוך בגרסה האחרונה של Google Mobile Ads Unity Plugin בגרסאות קודמות של Unity Editor.

הפעלת מעבד מקדים של גרסת Gradle

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

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

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

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

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

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

‫2021.3.41f1 עד 2022.3

הפעלת מעבד מקדים של גרסת Gradle

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

הפעלת מעבד מקדים של גרסת Gradle

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

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

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

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

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

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

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

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

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

ייצוא אל Android Studio

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

ייצוא הפרויקט

אם מופיעה אזהרה שחסרה רמת API‏ 35 של פלטפורמת Android SDK, בוחרים באפשרות 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 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 ומריצים את הפרויקט.