マニフェストにビルド変数を追加する

build.gradle ファイルで定義されている変数を AndroidManifest.xml ファイルに追加する必要がある場合は、manifestPlaceholders プロパティを使用して追加できます。このプロパティは、以下に示すように Key-Value ペアのマップを受け取ります。

Groovy

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

Kotlin

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

さらに、プレースホルダのいずれかを次のような属性値としてマニフェスト ファイルに追加できます。

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

デフォルトでは、アプリのアプリケーション ID もビルドツールにより ${applicationId} プレースホルダに設定されます。この値は、現在のビルドの最終的なアプリケーション ID(ビルド バリアントによる変更を含む)と常に一致します。 これは、ビルド バリアント間でもインテントのアクションなどの識別子に一意の名前空間を使用する場合に役立ちます。

たとえば、build.gradle ファイルが次のようであったとします。

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"
        }
    }
}

この場合、次のようにアプリケーション ID をマニフェストに追加できます。

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

また、「free」プロダクト フレーバーをビルドした場合のマニフェストは次のようになります。

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

詳しくは、アプリケーション ID の設定をご覧ください。