1

広告ありまたはなし、CustomJarSDK ありまたはなし、GooglePlay、AmazonApps、SamsungApps の 3 つの市場向けのバージョンの APK が必要な状況を想像してみてください。

私の完璧な世界では、7 つのフレーバーしかありません。

  • 広告あり
  • 広告なし
  • CustomJarSDK を使用
  • CustomJarSDK なし
  • グーグルプレイの場合
  • Amazonストアの場合
  • SamsungApps の場合

そして、私の完璧な世界では、gradle でフレーバーを組み合わせる方法があるはずです。たとえば、次のようになります。

  • 広告 + SamsungApps + CustomJarSDK あり
  • 広告なし + GooglePlay
  • 等...

それは可能ですか?または、あなたは呪われて、それらすべてのフレーバーを持つように強制されています...?????

  • 広告付きの GooglePlay の場合
  • 広告付きの GooglePlay と CustomJarSDK の場合
  • 広告なしの GooglePlay の場合
  • 広告なしで CustomJarSDK を使用した GooglePlay の場合
  • 広告のあるAmazonStoreの場合
  • 広告と CustomJarSDK を使用する AmazonStore の場合
  • 広告なしのAmazonStoreの場合
  • 広告なしで CustomJarSDK を使用する AmazonStore の場合
  • 広告付きのSamsungAppsの場合
  • 広告と CustomJarSDK を使用する SamsungApps の場合
  • 広告のないSamsungAppsの場合
  • 広告なしで CustomJarSDK を使用する SamsungApps の場合
4

1 に答える 1

1

あなたの質問に答えるのはかなり難しいです。それは、どのフレーバーでもどのリソースが異なるかによって異なります。

現在、フレーバーを拡張したりマージしたりすることはできません。

ただし、プロジェクトを改善するためにいくつかのヒントを使用できます。

たとえば、さまざまなフレーバーに共通のソースセット リソースを使用できます。

そんな感じ:

+ App // module
|- src
   |- common // shared srcDir
      |- java
   + flavor1
      |- java
   + flavor2
      |- java
   + flavor3
   + flavor4

次に、次のように定義できます。

 sourceSets {            
        flavor1.java.srcDir 'src/common/java'
        flavor2.java.srcDir 'src/common/java'
        flavor3.java.srcDir 'src/common/java'
    }

あなたの場合、フレーバーが次の場合に評価する必要があります。

  • 広告付きの GooglePlay の場合
  • 広告付きの GooglePlay と CustomJarSDK の場合
  • 広告なしの GooglePlay の場合
  • 広告なしで CustomJarSDK を使用した GooglePlay の場合

共通ブロックを使用できます:

 sourceSets {
            flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java']
            flavor2.java.srcDir = ['src/common/java', 'src/flavor2/java']
            flavor3.java.srcDir = ['src/common/java', 'src/flavor3/java']
        }

フレーバーは、別のフレーバーで定義された同じソースセットを使用できます
そのようなもの:

flavor2{
        java.srcDirs = sourceSets.flavor1.java.srcDirs
        res.srcDirs = sourceSets.flavor1.res.srcDirs
        resources.srcDirs = sourceSets.flavor1.resources.srcDirs
        aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
        renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
        assets.srcDirs = sourceSets.flavor1.assets.srcDirs
    }

また、各フレーバーは複数のリソース フォルダーを定義できます。例えば:

android.sourceSets {
   flavor1.res.srcDirs = ['src/main/res', src/main/res2']
}
于 2016-01-27T10:59:40.467 に答える