7

特定のフレーバー グループの組み合わせのファイルまたは構成設定を提供できるかどうか疑問に思っています。たとえば、それぞれ 2 つの異なるフレーバーを持つ 2 つのフレーバー グループがあります。

フレーバー グループ: バージョン

  • v2
  • v3

フレーバーグループ: タイプ

  • 自由
  • 満杯

「タイプ」、「バージョン」を注文すると、アプリの 4 つの異なるフレーバーをビルドできます。

  • FreeV2
  • FreeV3
  • FullV2
  • FullV3

ソースツリーは次のようになります。

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)

これはまさに私が望んでいるものであり、私のプロジェクトでは非常にうまく機能します。ただし、特定のフレーバー グループの組み合わせのファイルを提供できればと思います。たとえば、FullV3 と FullV2 に異なる AndroidManifests を提供したいと考えています。私はこれが可能だとは思いませんか?例えば:

/src
    /free
        /res
    /full
        /res
    /v2
        /java
        /res
        AndroidManifest.xml (features and permissions for v2 flavors)
    /v3
        /java
        /res
        AndroidManifest.xml (features and permissions for v3 flavors)
    /fullv3
        AndroidManifest.xml (features and permissions for full v3 only!)
    /fullv2
        AndroidManifest.xml (features and permissions for full v2 only!)

gradleビルドファイルでもこれを行うことができればうれしいです:

productFlavors {
    free {
        packageName ...
        flavorGroup "type"
    }
    full {
        packageName ...
        flavorGroup "type"
    }
    v2 {
        packageName ...
        flavorGroup "version"
    }
    v3 {
        packageName ...
        flavorGroup "version"
    }
    fullv2 {
        ...  <-- specifically for the full-v2 combination
    }
    fullv3 {
        ...  <-- specifically for the full-v3 combination
    }
}

注: 1 つの解決策は、1 つのフレーバー グループのみを持ち、4 つのフレーバーを明示的に定義することです。

  • freeV2
  • freeV3
  • フルV2
  • フルV3

ただし、これは実行可能な解決策ではありません。これは、各バージョンの無料および完全なフレーバーのバージョン固有のコードをすべて複製する必要があるためです。

4

4 に答える 4

10

この機能は、Gradle 用 Android プラグインのバージョン0.7.0で追加されました。

http://tools.android.com/tech-docs/new-build-system <-- 1/6/14 現在、このリンクはアクティブです

フレーバーがある場合は、バリアント固有のソース フォルダーを作成できるようになりました。

  • アプリのみ (ライブラリやテストではありません)。名前はsrc/flavorDebug/...またはsrc/flavor1Flavor2Debug/
    • 最初の文字が小文字のキャメルケースの命名に注意してください。
  • そのコンポーネント (res、マニフェストなど) は、ビルド タイプやフレーバーのコンポーネントよりも優先度が高くなります。
  • 複数のフレーバー ディメンションが使用されている場合は、「フレーバーの組み合わせ」ソース フォルダーも使用できます。例えばsrc/flavor1Flavor2/
    • これは、すべてのディメンションのすべての組み合わせに適用されることに注意してください
    • その優先度は単一フレーバー ソースセットよりも高く、ビルド タイプよりも低くなります。

2014 年 1 月 30 日更新

IntelliJ IDEA v13.0.2 (ビルド 133.696) は、0.7.0 で行われた Android Gradle プラグインの変更をサポートするようになりました

于 2014-01-06T18:05:55.773 に答える
0

ビルド ファイルで各フレ​​ーバーの組み合わせの構成を設定するには、ここで提案したソリューションを使用できます: https://stackoverflow.com/a/26585241

次に、 variantFilter を使用して、すべてのフレーバーの組み合わせを反復処理し、各組み合わせの名前を一致させることができます (@abest からの回答で言及されているように、特定のリソースを配置できる「フレーバーの組み合わせ」ソース フォルダーを作成するときに使用される名前と同様):

android.variantFilter { variant ->
    def flavorString = ""
    def flavors = variant.getFlavors()
    for (int i = 0; i < flavors.size(); i++) {
        flavorString += flavors[i].name;
    }
    if(flavorString.equalsIgnoreCase("fullv2")) {
        variant.getDefaultConfig().applicationId "com.example.fullv2"
    }
于 2014-10-27T14:54:16.507 に答える
0

質問によると、v2 と v3 の両方のフル バージョンに別の AndroidManifest ファイルが必要です。したがって、フレーバーを完全かつ無料で使用する代わりに、都合に応じてフレーバーと buildTypes を組み合わせて使用​​できます。

例えば

full と free はビルド タイプではなくプロダクト フレーバーである必要があることはわかっていますが、要件では、full と free は buildTypes であり、v2 と v3 はアプリ フレーバーです。

buildTypes {

  debug {
     runProguard false
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

  }

  full{
     runProguard false/true
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
     signingConfig signingConfigs.prodSigning // write your signingConfig

   }

  free{
     runProguard false/true
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
     signingConfig signingConfigs.prodSigning // write your signingConfig

    }
 }

 productFlavors{

   v2 {
     //required configuration for full version

   }

   v3 {
      //required configuration for full version

    }

  } 

プロジェクト構造は次のようになります。

  --src
    ---main
      ----java
      ----res
      ----Manifest
    ---full
      ----java
      ----res
      ----Manifest(Manifest you want for Full Version)
    ---free
      ----java
      ----res
      ----Manifest (Manifest you want for Free Version)
    ---v2
      ----java
      ----res
      ----Manifest
    ---v3
      ----java
      ----res
      ----Manifest

Gradle と同期すると、AS の左ペインのビルド バリアント タブにビルド タイプの組み合わせが表示され、同じものに対して異なるタスクが作成されます。

Build Variant に移動し、選択に従ってドロップダウンからビルドを生成します。

このようなビルドバリアントが得られます

ここに画像の説明を入力

于 2014-01-04T22:43:08.243 に答える