Kompilowanie aplikacji na Androida w Unity

Edytor Unity jest powiązany z określoną wersją Gradle. Starsze wersje edytora Unity używają starszych wersji Gradle, które są niezgodne z najnowszą wersją reklam mobilnych Google.

Aby skompilować projekt na Androida, wybierz preferowaną wersję edytora Unity:

2023.1 lub nowsza

Włączanie postprocesora kompilacji Gradle

Procesor końcowy kompilacji Gradle jest domyślnie włączony w Edytorze Unity w wersji 2021.3.41f1 i nowszych. Procesor automatycznie stosuje wszystkie niezbędne ustawienia Gradle i odtwarzacza, aby obsługiwać najnowszy pakiet SDK do reklam mobilnych Google w starszych wersjach edytora Unity.

Włączanie postprocesora kompilacji Gradle

Ręczne konfigurowanie ustawień Androida i Gradle

Włączanie niestandardowych szablonów Gradle

Kliknij Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włączanie niestandardowych szablonów Gradle

Ustaw docelowy poziom API 34

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

Ustawianie docelowego poziomu API

2021.3.41f1–2022.3

Włączanie postprocesora kompilacji Gradle

Procesor końcowy kompilacji Gradle jest domyślnie włączony w Edytorze Unity w wersji 2021.3.41f1 i nowszych. Procesor automatycznie stosuje wszystkie niezbędne ustawienia Gradle i odtwarzacza, aby obsługiwać najnowszy pakiet SDK do reklam mobilnych Google w starszych wersjach edytora Unity.

Włączanie postprocesora kompilacji Gradle

Ręczne konfigurowanie ustawień Androida i Gradle

Włączanie niestandardowych szablonów Gradle

Kliknij Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włączanie niestandardowych szablonów Gradle

Ustaw docelowy poziom API 34

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

Ustawianie docelowego poziomu API

Dodawanie listy ignorowanych w Jetifierze do pliku `gradleTemplate.properties`

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

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

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

Edytuj Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml i usuń android:minSdkVersion="21" z węzła uses-sdk . AndroidManifest.xml powinno wyglądać 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łączanie niestandardowych szablonów Gradle

Kliknij Ustawienia projektu > Odtwarzacz > Android > Ustawienia publikowania > Kompilacja i włącz Custom Main Gradle Template oraz Custom Gradle Properties Template.

Włączanie niestandardowych szablonów Gradle

Ustaw docelowy poziom API 34

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

Ustawianie docelowego poziomu API

Eksportowanie do Androida Studio

Zmodyfikuj ustawienia kompilacji Androida, wybierając Plik (lub Edytor Unity na MacOS) > Ustawienia kompilacji i zaznaczając Eksportuj projekt:

Eksportowanie projektu

Jeśli pojawi się ostrzeżenie o braku interfejsu API platformy Android SDK na poziomie 34, wybierz opcję „Zaktualizuj Android SDK”.

Otwórz Android Studio

Ta sekcja zawiera czynności wykonywane w Android Studio.

Aktualizowanie konfiguracji Gradle JDK

Otwórz ustawienia Gradle, wybierając Plik (lub Android Studio na MacOS) > Ustawienia > Kompilacja > Wykonanie > Wdrożenie > Narzędzia do kompilacji > Gradle. Znajdź menu Gradle JDK i ustaw w nim JDK 17 lub nowszą wersję.

Aktualizowanie konfiguracji Gradle JDK

Jeśli nie masz zainstalowanego pakietu JDK 17, wybierz opcję Pobierz JDK na pasku menu Gradle JDK i pobierz zgodną wersję. Zalecamy używanie dostawcy JetBrains runtime z obsługą architektury aarch64, aby dopasować go do wersji rozpowszechnianej przez 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
}

Zaktualizuj: /gradle/gradle-wrapper.properties

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

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

Zaktualizuj: launcher/build.gradle

  • Ustaw atrybut namespace, używając wartości atrybutu package z launcher/AndroidManifest.xml
  • Ustaw 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 pluginManagementdependencyResolutionManagement.

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"
        }
    }
}

Aktualizacja pliku unityLibrary/build.gradle

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

Aktualizacja pliku unity/Library/GoogleMobileAdsPlugin.androidlib/build.gradle

Ustaw atrybut namespace z wartością "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 na Androida

W Android Studio uruchom synchronizację Gradleuruchom projekt.