บิลด์ Unity สำหรับ Android

Unity Editor จะล็อกเวอร์ชันไว้กับ Gradle เวอร์ชันหนึ่งๆ Unity Editor เวอร์ชันก่อนหน้าใช้ Gradle เวอร์ชันก่อนหน้าซึ่งไม่สามารถใช้งานร่วมกับ Google Mobile Ads เวอร์ชันล่าสุดได้

หากต้องการสร้าง Android ให้เลือกเวอร์ชัน Unity Editor ที่ต้องการ

2023.1 ขึ้นไป

เปิดใช้โปรแกรมประมวลผลภายหลังการสร้าง Gradle

เปิดใช้โปรแกรมประมวลผลภายหลังการบิลด์ Gradle โดยค่าเริ่มต้นใน Unity Editor 2021.3.41f1 ขึ้นไป ตัวประมวลผลจะใช้การตั้งค่า Gradle และการตั้งค่าเพลเยอร์ที่จำเป็นทั้งหมดโดยอัตโนมัติเพื่อรองรับ Google Mobile Ads SDK เวอร์ชันล่าสุดใน Unity Editor เวอร์ชันก่อนหน้า

เปิดใช้โปรแกรมประมวลผลภายหลังการสร้าง Gradle

กำหนดค่าการตั้งค่า Android และ Gradle ด้วยตนเอง

เปิดใช้เทมเพลต Gradle ที่กำหนดเอง

ไปที่การตั้งค่าโปรเจ็กต์ > Player > Android > การตั้งค่าการเผยแพร่ > สร้าง แล้วเปิดใช้ Custom Main Gradle Template และ Custom Gradle Properties Template

เปิดใช้เทมเพลต Gradle ที่กำหนดเอง

ตั้งค่าระดับ API เป้าหมายเป็น 34

จากเมนูหลัก ให้เปิดแก้ไข > การตั้งค่าโปรเจ็กต์ > เพลเยอร์ > Android > การตั้งค่าอื่นๆ แล้วตั้งค่าระดับ API เป้าหมายเป็นระดับ API 34 ขึ้นไป

ตั้งค่าระดับ API เป้าหมาย

2021.3.41f1 - 2022.3

เปิดใช้โปรแกรมประมวลผลภายหลังการสร้าง Gradle

เปิดใช้โปรแกรมประมวลผลภายหลังการบิลด์ Gradle โดยค่าเริ่มต้นใน Unity Editor 2021.3.41f1 ขึ้นไป ตัวประมวลผลจะใช้การตั้งค่า Gradle และการตั้งค่าเพลเยอร์ที่จำเป็นทั้งหมดโดยอัตโนมัติเพื่อรองรับ Google Mobile Ads SDK เวอร์ชันล่าสุดใน Unity Editor เวอร์ชันก่อนหน้า

เปิดใช้โปรแกรมประมวลผลภายหลังการสร้าง Gradle

กำหนดค่าการตั้งค่า Android และ Gradle ด้วยตนเอง

เปิดใช้เทมเพลต Gradle ที่กำหนดเอง

ไปที่การตั้งค่าโปรเจ็กต์ > Player > Android > การตั้งค่าการเผยแพร่ > สร้าง แล้วเปิดใช้ Custom Main Gradle Template และ Custom Gradle Properties Template

เปิดใช้เทมเพลต Gradle ที่กำหนดเอง

ตั้งค่าระดับ API เป้าหมายเป็น 34

จากเมนูหลัก ให้เปิดแก้ไข > การตั้งค่าโปรเจ็กต์ > เพลเยอร์ > Android > การตั้งค่าอื่นๆ แล้วตั้งค่าระดับ API เป้าหมายเป็นระดับ 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 ที่กำหนดเอง

ไปที่การตั้งค่าโปรเจ็กต์ > Player > Android > การตั้งค่าการเผยแพร่ > สร้าง แล้วเปิดใช้ Custom Main Gradle Template และ Custom Gradle Properties Template

เปิดใช้เทมเพลต Gradle ที่กำหนดเอง

ตั้งค่าระดับ API เป้าหมายเป็น 34

จากเมนูหลัก ให้เปิดแก้ไข > การตั้งค่าโปรเจ็กต์ > เพลเยอร์ > Android > การตั้งค่าอื่นๆ แล้วตั้งค่าระดับ API เป้าหมายเป็นระดับ API 34 ขึ้นไป

ตั้งค่าระดับ API เป้าหมาย

ส่งออกไปยัง Android Studio

แก้ไขการตั้งค่าการสร้าง Android โดยเลือกไฟล์ (หรือ Unity Editor ใน MacOS) > การตั้งค่าการสร้าง แล้วเลือกช่องทำเครื่องหมาย "ส่งออกโปรเจ็กต์"

ส่งออกโปรเจ็กต์

หากได้รับคำเตือนว่าไม่มี Android SDK Platform API ระดับ 34 ให้เลือกตัวเลือก "อัปเดต Android SDK"

เปิด Android Studio

ส่วนนี้มีขั้นตอนที่ดำเนินการภายใน Android Studio

อัปเดตการกำหนดค่า JDK ของ Gradle

เปิดการตั้งค่า Gradle จากไฟล์ (หรือ Android Studio ใน MacOS) > การตั้งค่า > สร้าง > การดำเนินการ > การติดตั้งใช้งาน > เครื่องมือบิลด์ > Gradle ค้นหาเมนูแบบเลื่อนลง Gradle JDK แล้วตั้งค่า Gradle JDK ให้ใช้ JDK 17 ขึ้นไป

อัปเดตการกำหนดค่า JDK ของ Gradle

หากไม่ได้ติดตั้ง JDK 17 ให้เลือกตัวเลือกดาวน์โหลด 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 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 แล้วเรียกใช้โปรเจ็กต์