4

私の Android アプリケーションには、「ブランド」(ブランド 1、ブランド 2) と「環境」(ステージング、プロダクション) の 2 つのフレーバー ディメンションがあります。しばらくしてから「環境」ディメンションを追加しました。以前BuildConfigに、さまざまなブランドに対していくつかの変数を定義していました。より具体的には、次のBASE_URLように定義しました。

flavorDimensions 'brand'
productFlavors {

    brand1 {
        dimension 'brand'
        ...
        buildConfigField "String", "BASE_URL", "\"http://brand.one.api/\""
        ...
    }

    brand2 {
        dimension 'brand'
        ...
        buildConfigField "String", "BASE_URL", "\"http://brand.two.api/\""
        ...
    }
}

ここで、「環境」ディメンションを追加しました。設定したいのは、次の 4 つの異なるエンドポイントです。

  1. Brand1-staging: " http://brand.one.staging.api/ "
  2. Brand1-production: " http://brand.one.production.api/ "
  3. Brand2-staging: " http://brand.two.staging.api/ "
  4. Brand2-production: " http://brand.two.production.api/ "

BuildConfigしかし、フレーバー ディメンションの特定の組み合わせに対して変数を作成する方法がわかりません。これは裸のグラドルでも可能ですか?

ありがとう

4

1 に答える 1

2

さらに調査した結果、ここで同様の質問が見つかりました。

ビルドバリアント名を反復処理し、それらが目的の名前と一致するかどうかを確認する関数を追加する必要があるようです。

私の問題は、実際には「ブランド」、「環境」、「API」の 3 つのディメンションがあることでした (本番用に 15、インスタント実行によるデバッグ用に 21)。したがって、バリアント名は brand1Api15StagingDebug、...、brand2Api21ProductionRelease、... などのようになります。

ここで必要だったのは、上記のリンクされた質問と組み合わせたグルーヴィーな正規表現マッチングでした。最後に、私が作成した関数は次のようになります。

android.applicationVariants.all { variant ->
    if (variant.getName() ==~ /brand1Api[0-9]{2}Staging.*/) {
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.one.staging.api//\""
    } else if(variant.getName() ==~ /brand1Api[0-9]{2}Production.*/){
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.one.production.api/\""
    } else if(variant.getName() ==~ /brand2Api[0-9]{2}Staging.*/) {
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.two.staging.api//\""
    } else if(variant.getName() ==~ /brand2Api[0-9]{2}Production.*/){
        variant.buildConfigField "String", "BASE_URL", "\"http://brand.two.production.api/\""
    } else {
        throw new Exception("Unexpected variant name: " + variant.getName())
    }
}

チェーンの最後に例外スローを追加したので、誰かがバリアント名をここでチェックされていないものに変更すると、ビルドは失敗します。これは、間違ったエンドポイントでアプリケーションを構築しないようにするために重要です。

魅力のように機能します。

于 2016-10-24T08:26:30.817 に答える