さまざまなビルドバリアントフレーバーを使用してアプリをビルドしています。フレーバーは「無料」と「有料」です。 Javaクラスで、アプリが「有料」の場合にのみトリガーされるロジックを作成したいので、gradleビルドプロセス中に「applicationId」を次のように設定する方法が必要です。下に示された:
gradle.build
productFlavors {
free {
applicationId "com.example.free"
resValue "string", "app_name", "Free App"
versionName "1.0-free"
}
paid {
applicationId "com.example.paid"
resValue "string", "app_name", "Paid App"
versionName "1.0-paid"
}
アプリケーションIDを取得したら、次のようなことができます。
if(whateverpackageid.equals("paid")) {
// Do something or trigger some premium functionality.
}
Gradleビルドプロセス中に、アプリがコンパイルされると、「applicationId」が最終的に「パッケージ名」になると言うのは正しいですか?もしそうなら、「アプリケーションID」または「パッケージ名」のいずれかを取得して、Javaファイルにフレーバーに依存するロジックを実装できるようにするための最良の方法は何ですか?
製品フレーバーでビルド構成変数を使用します。次のようなもの:
productFlavors {
free {
applicationId "com.example.free"
resValue "string", "app_name", "Free App"
versionName "1.0-free"
buildConfigField "boolean", "PAID_VERSION", "false"
}
paid {
applicationId "com.example.paid"
resValue "string", "app_name", "Paid App"
versionName "1.0-paid"
buildConfigField "boolean", "PAID_VERSION", "true"
}
}
次に、ビルド後に使用できます。
if (BuildConfig.PAID_VERSION) {
// do paid version only stuff
}
Gradleがユーザーに代わって生成するBuildConfigクラスをコンパイルしてインポートする前に、属性を追加した後、gradleで同期/ビルドを実行する必要がある場合があります。
APPLICATION_ID、BUILD_TYPE、FLAVOR、VERSION_CODE、VERSION_NAMEなどのすべての値を取得するための最良の解決策を見つけました。
次のように記述します:Log.d( "Application Id:"、BuildConfig.APPLICATION_ID);あなたのコードで。それはあなたのフレーバーのAPPLICATION_IDを提供します。
BuildConfig.Java
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "";
}
詳細については、次のリンクを参照してください: http://blog.brainattica.com/how-to-work-with-flavours-on-Android/