Injetar variáveis de compilação no manifesto

Se você precisa inserir variáveis no arquivo AndroidManifest.xml que estão definidas no arquivo build.gradle, pode fazer isso com a propriedade manifestPlaceholders. Essa propriedade usa um mapa de pares de chave-valor, conforme mostrado aqui:

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

Você pode inserir um dos marcadores no arquivo de manifesto como um valor de atributo como este:

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

Por padrão, as ferramentas de compilação também fornecem o ID do aplicativo no marcador ${applicationId}. O valor sempre corresponde ao ID do aplicativo final para a compilação atual (incluindo alterações por variantes de compilação). Isso é útil quando você quer usar um namespace exclusivo para identificadores, como uma ação de intent, mesmo entre suas variantes de compilação.

Por exemplo, se o arquivo build.gradle for assim:

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

Então, você poderá inserir o ID do aplicativo no seu manifesto da seguinte forma:

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

E o resultado do manifesto quando você criar a variação "free" do produto será este:

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

Para mais informações, leia Definir o ID do aplicativo.