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 del complemento de anuncios de Google para dispositivos móviles.

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

Unity Editor Versión del complemento de anuncios de Google para dispositivos móviles para Unity
2023.1 o superior Más reciente
2021.3.41f1 - 2022.3 9.1.0
2021.3.37f1 o inferior 8.5.3

Puedes actualizar Gradle de forma manual para usar el complemento de anuncios de Google para dispositivos móviles para Unity, incluso en versiones de Unity Editor más antiguas. Para compilar Android, selecciona la versión de Unity Editor que prefieras:

2023.1 o superior

Habilita las plantillas personalizadas de Gradle

Ve a Project Settings (Configuración del proyecto) > Player (Reproductor) > Android > Publishing Settings (Configuración de publicación) > Build (Compilar) 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 (Editar) > Project Settings (Configuración del proyecto) > Player (Reproductor) > Android > Other Settings (Otros parámetros de configuración) y establece el valor de Target API Level (Nivel de API objetivo) en API Level 34 (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 (Configuración del proyecto) > Player (Reproductor) > Android > Publishing Settings (Configuración de publicación) > Build (Compilar) 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 (Editar) > Project Settings (Configuración del proyecto) > Player (Reproductor) > Android > Other Settings (Otros parámetros de configuración) y establece el valor de Target API Level (Nivel de API objetivo) en API Level 34 (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 así:

<?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 haber hecho lo siguiente:

  • Descargaste e instalaste la versión estable más reciente de Android Studio

Habilita las plantillas personalizadas de Gradle

Ve a Project Settings (Configuración del proyecto) > Player (Reproductor) > Android > Publishing Settings (Configuración de publicación) > Build (Compilar) 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 (Editar) > Project Settings (Configuración del proyecto) > Player (Reproductor) > Android > Other Settings (Otros parámetros de configuración) y establece el valor de Target API Level (Nivel de API objetivo) en API Level 34 (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 (Archivo) (o Unity Editor en macOS) > Build Settings (Configuración de la compilación) y marca Export Project (Exportar proyecto):

Export Project (Exportar proyecto)

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

Abre Android Studio

En esta sección, se incluyen los pasos que se realizan en Android Studio.

Actualiza la configuración del JDK de Gradle

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

Actualiza la configuración del JDK de Gradle

Si no tienes instalado el JDK 17, selecciona las opciones de Download JDK (Descargar el JDK) en la barra de menú de Gradle JDK (JDK de Gradle) y descarga una versión compatible. Recomendamos el proveedor de JetBrains Runtime con compatibilidad con aarch64, para que coincida con lo que distribuye 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 una superior.

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 usar Gradle 8.1.1 o una versión superior.

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

Establece 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.