Compila Unity para Android

Unity Editor está bloqueado en una versión específica de Gradle. Las versiones anteriores de Unity Editor usan versiones anteriores de Gradle que no son compatibles con la versión más reciente de Google Mobile Ads.

En la siguiente tabla, se muestra la versión máxima compatible del complemento de Google Mobile Ads que puedes usar según tu versión de Unity Editor:

Unity Editor Versión del complemento de Google Mobile Ads para Unity
2023.1 o posterior Más reciente
2021.3.41f1 - 2022.3 9.1.0
2021.3.37f1 o anterior 8.5.3

Puedes actualizar Gradle manualmente para usar el complemento de Google Mobile Ads para Unity, incluidos los editores de Unity más antiguos. Para compilar Android, selecciona la versión de Unity Editor que prefieras:

2023.1 o posterior

Habilita las plantillas personalizadas de Gradle

Ve a Project Settings > Player > Android > Publishing Settings > Build y habilita Custom Main Gradle Template y Custom Gradle Properties Template.

Habilita las plantillas personalizadas de Gradle

Establece el nivel de API objetivo en 34

En el menú principal, abre Edit > Project Settings > Player > Android > Other Settings y establece el valor de nivel de API objetivo en nivel de API 34 o uno superior.

Establece el nivel de API objetivo

2021.3.41f1 - 2022.3

Habilita las plantillas personalizadas de Gradle

Ve a Project Settings > Player > Android > Publishing Settings > Build y habilita Custom Main Gradle Template y Custom Gradle Properties Template.

Habilita las plantillas personalizadas de Gradle

Establece el nivel de API objetivo en 34

En el menú principal, abre Edit > Project Settings > Player > Android > Other Settings y establece el valor de nivel de API objetivo en nivel de API 34 o uno superior.

Establece el nivel de API objetivo

Agrega la lista negra de Jetifier a "gradleTemplate.properties"

Edita Assets/Plugins/Android/gradleTemplate.properties y agrega la siguiente línea:

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

Quita "minSDKVersion" de "AndroidManifest.xml"

Edita Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml y quita android:minSdkVersion="21" del nodo uses-sdk . Tu archivo AndroidManifest.xml debería verse de la siguiente manera:

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

2021.3.37f1 - 2019.4

Requisitos previos

Antes de continuar, asegúrate de cumplir los siguientes requisitos:

  • Descarga e instala la versión estable más reciente de Android Studio.

Habilita las plantillas personalizadas de Gradle

Ve a Project Settings > Player > Android > Publishing Settings > Build y habilita Custom Main Gradle Template y Custom Gradle Properties Template.

Habilita las plantillas personalizadas de Gradle

Establece el nivel de API objetivo en 34

En el menú principal, abre Edit > Project Settings > Player > Android > Other Settings y establece el valor de nivel de API objetivo en nivel de API 34 o uno superior.

Establece el nivel de API objetivo

Realiza exportaciones a Android Studio

Para modificar la configuración de la compilación de Android, selecciona File (o Unity Editor en macOS) > Build Settings y marca Export Project:

Exportar el proyecto

Si recibes una advertencia que indica que falta el nivel de API 34 en la plataforma del SDK de Android, selecciona la opción "Update Android SDK".

Abre Android Studio

En esta sección, se indican los pasos que se deben seguir en Android Studio.

Actualiza la configuración del JDK de Gradle

Abre la configuración de Gradle desde File (o Android Studio en macOS) > Settings > Build > Execution > Deployment > Build Tools > Gradle. Busca el menú desplegable Gradle JDK y configura el JDK de Gradle para que use JDK 17 o una versión posterior.

Actualiza la configuración del JDK de Gradle

Si no tienes instalado el JDK 17, selecciona las opciones de Download JDK en la barra de menú de Gradle JDK y descarga una versión compatible. Recomendamos seleccionar el proveedor JetBrains Runtime compatible con aarch64 para que coincida con la distribución de Android Studio.

Actualiza el archivo build.gradle a nivel del proyecto

Establece la versión de las herramientas de Gradle en 8.1.1 o posterior.

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
}

Actualiza /gradle/gradle-wrapper.properties

Establece distributionUrl para que use Gradle 8.1.1 o posterior.

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

Actualiza launcher/build.gradle

  • Configura el atributo namespace con el valor del atributo package de launcher/AndroidManifest.xml.
  • Establece sourceCompatibility y targetCompatibility en 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'

Actualiza settings.gradle a nivel del proyecto

Se establecieron las secciones pluginManagement y 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"
        }
    }
}

Actualiza unityLibrary/build.gradle

  • Establece namespace con el valor "com.unity3d.player".
  • Establece sourceCompatibility y targetCompatibility en 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' }

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

Establece el atributo namespace con el valor "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
    }
}

Ejecuta el proyecto de Android

En Android Studio, ejecuta la sincronización de Gradle y ejecuta el proyecto.