Kompilowanie aplikacji na Androida w Unity

Edytor Unity jest zablokowany w określonej wersji Gradle. Starsze wersje edytora Unity używają starszych wersji Gradle, które są niezgodne z najnowszą wersją pakietu SDK do reklam mobilnych Google.

Aby utworzyć kompilację na Androida, wybierz preferowaną wersję edytora Unity:

2023.1 lub nowsza

Włącz procesor wstępny kompilacji Gradle

W edytorze Unity w wersji 2021.3.41f1 i nowszych preprocesor kompilacji Gradle jest domyślnie włączony. Procesor automatycznie stosuje wszystkie niezbędne ustawienia Gradle i odtwarzacza, aby obsługiwać najnowszą wersję Google Mobile Ads Unity Plugin we wcześniejszych wersjach edytora Unity.

Włącz preprocesor kompilacji Gradle

Ręczne konfigurowanie ustawień Androida i Gradle

Włącz niestandardowe szablony Gradle

Kliknij Project Settings > Player > Android > Publishing Settings > Build (Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja) i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włącz niestandardowe szablony Gradle

Ustaw docelowy poziom interfejsu API

W menu głównym otwórz Edit > Project Settings > Player > Android > Other Settings (Edytuj > Ustawienia projektu > Odtwarzacz > Android > Inne ustawienia) i ustaw Target API Level (Docelowy poziom interfejsu API) na API Level 24 (Poziom interfejsu API 24) lub wyższy.

2021.3.41f1–2022.3

Włącz procesor wstępny kompilacji Gradle

W edytorze Unity w wersji 2021.3.41f1 i nowszych preprocesor kompilacji Gradle jest domyślnie włączony. Procesor automatycznie stosuje wszystkie niezbędne ustawienia Gradle i odtwarzacza, aby obsługiwać najnowszą wersję Google Mobile Ads Unity Plugin we wcześniejszych wersjach edytora Unity.

Włącz preprocesor kompilacji Gradle

Ręczne konfigurowanie ustawień Androida i Gradle

Włącz niestandardowe szablony Gradle

Kliknij Project Settings > Player > Android > Publishing Settings > Build (Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja) i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włącz niestandardowe szablony Gradle

Ustaw docelowy poziom interfejsu API

W menu głównym otwórz Edit > Project Settings > Player > Android > Other Settings (Edytuj > Ustawienia projektu > Odtwarzacz > Android > Inne ustawienia) i ustaw Target API Level (Docelowy poziom interfejsu API) na API Level 24 (Poziom interfejsu API 24) lub wyższy.

Dodawanie listy ignorowanych fragmentów kodu Jetifier do pliku `gradleTemplate.properties`

Zmodyfikuj plik Assets/Plugins/Android/gradleTemplate.properties i dodaj ten wiersz:

  android.jetifier.ignorelist=annotation-experimental-1.4.0.aar

Usuń `minSDKVersion` z pliku `AndroidManifest.xml`.

Edytuj Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml i usuń android:minSdkVersion="21" z węzła uses-sdk . Plik AndroidManifest.xml powinien wyglądać mniej więcej tak:

<?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

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że masz:

Włącz niestandardowe szablony Gradle

Kliknij Project Settings > Player > Android > Publishing Settings > Build (Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja) i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włącz niestandardowe szablony Gradle

Ustaw docelowy poziom interfejsu API

W menu głównym otwórz Edit > Project Settings > Player > Android > Other Settings (Edytuj > Ustawienia projektu > Odtwarzacz > Android > Inne ustawienia) i ustaw Target API Level (Docelowy poziom interfejsu API) na API Level 35 (Poziom interfejsu API 35) lub wyższy.

Eksportowanie do Android Studio

Zmień ustawienia kompilacji na Androida, wybierając File (lub Unity Editor na macOS) > Build Settings, i zaznacz Export Project:

Eksportowanie projektu

Jeśli pojawi się ostrzeżenie, że brakuje interfejsu API platformy Android SDK na poziomie 35, wybierz opcję Zaktualizuj pakiet Android SDK.

Otwórz Android Studio.

Ta sekcja zawiera instrukcje dotyczące czynności wykonywanych w Android Studio.

Aktualizowanie konfiguracji JDK Gradle

Otwórz ustawienia Gradle, klikając Plik (lub Android Studio na macOS) > Ustawienia > Kompilacja > Wykonanie > Wdrażanie > Narzędzia do kompilacji > Gradle. Znajdź menu Gradle JDK i ustaw Gradle JDK na wersję 17 lub nowszą.

Aktualizowanie konfiguracji JDK Gradle

Jeśli nie masz zainstalowanego pakietu JDK 17, wybierz opcję Pobierz JDK na pasku menu Gradle JDK i pobierz zgodną wersję. Zalecamy dostawcę środowiska wykonawczego JetBrains z obsługą aarch64, aby dopasować go do tego, co dystrybuuje Android Studio.

Aktualizowanie pliku build.gradle na poziomie projektu

Ustaw wersję narzędzi Gradle na 8.1.1 lub nowszą.

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
}

Aktualizacja reguły /gradle/gradle-wrapper.properties

Ustaw distributionUrl, aby używać Gradle 8.1.1 lub nowszej wersji.

distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip

Aktualizacja reguły launcher/build.gradle

  • Ustaw atrybut namespace, używając wartości atrybutu package z: launcher/AndroidManifest.xml
  • Ustawianie sourceCompatibility i targetCompatibility na 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'

Aktualizowanie settings.gradle na poziomie projektu

Ustaw sekcje pluginManagement i 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"
        }
    }
}

Aktualizowanie pliku unityLibrary/build.gradle

  • Ustaw namespace na wartość "com.unity3d.player"
  • Ustaw sourceCompatibility i targetCompatibility na 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' }

Zaktualizuj plik unity/Library/GoogleMobileAdsPlugin.androidlib/build.gradle

Ustaw atrybut namespace na wartość "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
    }
}

Uruchamianie projektu aplikacji na Androida

W Android Studio uruchom synchronizację Gradle i uruchom projekt.