Cómo insertar variables de compilación en el manifiesto

Si necesitas insertar variables en el archivo AndroidManifest.xml que estén definidas en el archivo build.gradle, puedes hacerlo con la propiedad manifestPlaceholders. Esta propiedad toma una asignación de pares clave-valor, como se muestra a continuación:

Groovy

android {
    defaultConfig {
        manifestPlaceholders = [hostName:"www.example.com"]
    }
    ...
}

Kotlin

android {
    defaultConfig {
        manifestPlaceholders["hostName"] = "www.example.com"
    }
    ...
}

Luego, puedes insertar uno de los marcadores de posición en el archivo de manifiesto como un valor de atributo de la siguiente manera:

<intent-filter ... >
    <data android:scheme="https" android:host="${hostName}" ... />
    ...
</intent-filter>

De forma predeterminada, las herramientas de compilación también proporcionan el ID de aplicación de tu app en el marcador de posición ${applicationId}. El valor siempre coincide con el ID de aplicación final de la compilación actual (incluidas las modificaciones que realizan las variantes de compilación), lo que resulta útil cuando quieres usar un espacio de nombres único para los identificadores como una acción de intent, incluso entre tus variantes de compilación.

Por ejemplo, si tu archivo build.gradle tiene el siguiente aspecto:

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
    }
    productFlavors {
        free {
            applicationIdSuffix ".free"
        }
        pro {
            applicationIdSuffix ".pro"
        }
    }
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
    }
    productFlavors {
        create("free") {
            applicationIdSuffix = ".free"
        }
        create("pro") {
            applicationIdSuffix = ".pro"
        }
    }
}

Entonces, podrás insertar el ID de aplicación en tu manifiesto de la siguiente manera:

<intent-filter ... >
    <action android:name="${applicationId}.TRANSMOGRIFY" />
    ...
</intent-filter>

Y el resultado del manifiesto una vez que compilaste la variante de producto "gratuita" será el siguiente:

<intent-filter ... >
   <action android:name="com.example.myapp.free.TRANSMOGRIFY" />
    ...
</intent-filter>

Para obtener más información, lee Cómo configurar el ID de aplicación.