web-dev-qa-db-ja.com

Android Studio Gradleフレーバーディメンションビルドバリアントが正しく機能しない

アプリには2つの側面があります。緑と青を呼び出します。これらの2つの次元のみが存在しますが、製品のフレーバーの数は無制限です。これは私がgradleに設定する方法です

flavorDimensions "green", "blue"

productFlavors {

    one {
        applicationId "com.app.green.one"
        versionCode 1
        versionName "1.0.0.1";
        flavorDimension = "green"
    }
    two {
        applicationId "com.app.blue.two"
        versionCode 6
        versionName "1.0.1";
        flavorDimension = "blue"
    }
}

しかし、gradleを同期した後、ビルドバリアントタブに表示されるのはoneTwoDebugとoneTwoReleaseだけです。ここで、greenOneDebug greenOneRelease、blueTwoDebug、blueTwoReleaseが表示されます。

理論的には、このように拡張したい

one {
    applicationId "com.app.green.one"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
two {
    applicationId "com.app.blue.two"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}
three {
    applicationId "com.app.green.three"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
four {
    applicationId "com.app.blue.four"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}

この場合、ディメンションはアプリの「タイプ」を表し、フレーバーは追加できる組織に適しています。

**編集ここで指摘されているように、gradleの設定が間違っていました。

flavorDimensions "type", "organization"

productFlavors {

    blue {
        applicationId "com.app.blue"
        flavorDimension = "type"
        versionCode 6
        versionName "1.0.1";
    }
    red {
        applicationId "com.app.red"
        flavorDimension = "type"
        versionCode 1
        versionName "1.0.0.1";
    }

    company1 {
        flavorDimension = "organization"
    }
    company2 {
        flavorDimension = "organization"
    }
}

これまでのところこれでうまくいき、タイプを切り替えるためのJavaソースディレクトリを作成できますが、組織固有の構成ファイルが必要な場合は、Javaソースディレクトリを作成しますか?各組織にも?

21
Brian

FlavorDimensionの概念を誤解していると思います。

FlavorDimensionはflavor categoryのようなものであり、各ディメンションからのフレーバーのすべての組み合わせがバリアントを生成します。

この場合、「type」という名前の1つのflavorDimensionと「organization」という名前の別のディメンションを定義する必要があります。ディメンション「組織」のフレーバーごとに可能なすべての「タイプ」を生成します(または二重の定式化:「タイプ」ごとに、組織ごとにバリアントを生成します)。

フレーバーディメンションは、バリアントの生成に使用されるデカルト積を定義します。


[〜#〜] edit [〜#〜]:擬似うろこ状のコードで説明します:

ブロンズ、シルバー、ゴールドの「タイプ」を定義しましょう

いくつかの組織を定義しましょう:customerA、customerB、customerC

これらはすべてproductFlavorsですが、2つの異なる次元に属しています。

flavorDimensions("type_line", "organization")
productFlavors {

    gold {
        ...
        dimension = "type_line"
    }
    silver {
        ...
        dimension = "type_line"
    }
    bronze {
         ...
        dimension = "type_line"
    }

     customerA {
        ...
        dimension = "organization"
    }
    customerB {
        ...
        dimension = "organization"
    }
    customerC {
         ...
        dimension = "organization"
    }

}

この構成は18(3 * 3 * 2)バリアントを生成します(2つの標準ビルドタイプがある場合:デバッグとリリース):

gold-customerA-debug; gold-customerA-release; gold-customerB-debug; gold-customerB-release; gold-customerC-debug; gold-customerC-release;

silver-customerA-debug; silver-customerA-release; silver-customerB-debug; silver-customerB-release; silver-customerC-debug; silver-customerC-release;

...(ブロンズも同じ)

ディメンションの名前は完全に任意であり、バリアント名には影響しないことに注意してください。

フレーバーディメンションは非常に強力ですが、あまりに多く使用すると、バリアントの数が急激に増加します(ビルド後のクリーンアップタスクは、役に立たないまたは意味のないバリアントを削除するのに役立ちます)。

35
ben75