Compilare Unity per Android

Unity Editor è bloccato a una versione specifica di Gradle. Le versioni precedenti di Unity Editor utilizzano versioni precedenti di Gradle che non sono compatibili con l'ultima versione di Google Mobile Ads.

Per creare Android, seleziona la versione dell'editor Unity che preferisci:

2023.1 o versioni successive

Abilita il post-processore di build Gradle

Il post-processore di compilazione Gradle è abilitato per impostazione predefinita in Unity Editor 2021.3.41f1 e versioni successive. Il processore applica automaticamente tutte le impostazioni Gradle e del player necessarie per supportare l'ultima versione dell'SDK Google Mobile Ads nelle versioni precedenti di Unity Editor.

Abilita il post-processore di build Gradle

Configurare manualmente le impostazioni di Android e Gradle

Attivare i modelli Gradle personalizzati

Vai a Impostazioni progetto > Player > Android > Impostazioni di pubblicazione > Build e attiva Custom Main Gradle Template e Custom Gradle Properties Template.

Attivare i modelli Gradle personalizzati

Imposta il livello API target 34

Dal menu principale, apri Modifica > Impostazioni progetto > Player > Android > Altre impostazioni e imposta Livello API di destinazione su Livello API 34 o superiore.

Impostare il livello API target

2021.3.41f1 - 2022.3

Abilita il post-processore di build Gradle

Il post-processore di compilazione Gradle è abilitato per impostazione predefinita in Unity Editor 2021.3.41f1 e versioni successive. Il processore applica automaticamente tutte le impostazioni Gradle e del player necessarie per supportare l'ultima versione dell'SDK Google Mobile Ads nelle versioni precedenti di Unity Editor.

Abilita il post-processore di build Gradle

Configurare manualmente le impostazioni di Android e Gradle

Attivare i modelli Gradle personalizzati

Vai a Impostazioni progetto > Player > Android > Impostazioni di pubblicazione > Build e attiva Custom Main Gradle Template e Custom Gradle Properties Template.

Attivare i modelli Gradle personalizzati

Imposta il livello API target 34

Dal menu principale, apri Modifica > Impostazioni progetto > Player > Android > Altre impostazioni e imposta Livello API di destinazione su Livello API 34 o superiore.

Impostare il livello API target

Aggiungi l'elenco degli elementi da ignorare di Jetifier a `gradleTemplate.properties`

Modifica Assets/Plugins/Android/gradleTemplate.properties e aggiungi la seguente riga:

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

Rimuovi `minSDKVersion` da `AndroidManifest.xml`

Modifica Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml e rimuovi android:minSdkVersion="21" dal nodo uses-sdk . Il tuo AndroidManifest.xml dovrebbe avere questo aspetto:

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

Prerequisiti

Prima di continuare, assicurati di avere quanto segue:

Attivare i modelli Gradle personalizzati

Vai a Impostazioni progetto > Player > Android > Impostazioni di pubblicazione > Build e attiva Custom Main Gradle Template e Custom Gradle Properties Template.

Attivare i modelli Gradle personalizzati

Imposta il livello API target 34

Dal menu principale, apri Modifica > Impostazioni progetto > Player > Android > Altre impostazioni e imposta Livello API di destinazione su Livello API 34 o superiore.

Impostare il livello API target

Esportare in Android Studio

Modifica le impostazioni di build di Android selezionando File (o Unity Editor su macOS) > Build Settings e seleziona Export Project:

Esporta progetto

Se ricevi un avviso che indica che manca il livello API della piattaforma SDK Android 34, seleziona l'opzione "Aggiorna SDK Android".

Apri Android Studio

Questa sezione contiene i passaggi eseguiti in Android Studio.

Aggiorna la configurazione JDK di Gradle

Apri le impostazioni di Gradle da File (o Android Studio su macOS) > Impostazioni > Build > Esecuzione > Deployment > Strumenti di build > Gradle. Individua il menu a discesa Gradle JDK e imposta Gradle JDK in modo che utilizzi JDK 17 o versioni successive.

Aggiorna la configurazione JDK di Gradle

Se non hai installato JDK 17, seleziona le opzioni Scarica JDK dalla barra dei menu di Gradle JDK e scarica una versione compatibile. Consigliamo il fornitore JetBrains Runtime con supporto aarch64, in modo che corrisponda a quello distribuito da Android Studio.

Aggiorna il file build.gradle a livello di progetto

Imposta la versione degli strumenti Gradle su 8.1.1 o versioni successive.

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
}

Aggiorna /gradle/gradle-wrapper.properties

Imposta distributionUrl per utilizzare Gradle 8.1.1 o versioni successive.

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

Aggiorna launcher/build.gradle

  • Imposta l'attributo namespace utilizzando il valore dell'attributo package di launcher/AndroidManifest.xml
  • Imposta sourceCompatibility e targetCompatibility su 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'

Aggiorna settings.gradle a livello di progetto

Imposta le sezioni pluginManagement e 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"
        }
    }
}

Aggiorna unityLibrary/build.gradle

  • Imposta namespace con il valore "com.unity3d.player"
  • Imposta sourceCompatibility e targetCompatibility su 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' }

Aggiorna unity/Library/GoogleMobileAdsPlugin.androidlib/build.gradle

Imposta l'attributo namespace con il valore "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
    }
}

Esegui il progetto Android

Da Android Studio, esegui la sincronizzazione di Gradle e esegui il progetto.