0

過去 1 時間、gradle.properties で FLAVOR_NAME のような変数名を設定し、それを build.gradle で使用して一種の動的なフレーバー名を付けようとしました。まだ成功していません。動的なフレーバー名を持つことさえ可能ですか? 私は次のようなことを意味します:

$FLAVOR_NAME{
     versionName FLAVOR_VERSION
     versionCode FLAVOR_CODE
}
4

1 に答える 1

2

@Eloy_007、

あなたの質問はこれに似ていますが、あなたの質問にはいくつかのニュアンスがあり、次のように答えられると思います。

まず最初に、著者 (Coby Plain) がフレーバーを操作するためのより良いフレームワークを提供することについて読んでおくべき素晴らしい記事があります。また、android10/Android-CleanArchitecture リポジトリには、gradle プロパティをインポートするための非常に優れた構造があります。中を見て、ガイダンスbuildsystem/dependencies.gradleを求めてください。presentation/build.gradle

とはいえ、半動的/インポートされたフレーバーを操作する場合のプロパティのインポートの簡単なサンプルを次に示します。

gradle ファイルでは、関連するすべてのプロパティが一緒に定義されている外部ファイルを参照でき、文字列などを結合するために単純なグルーヴィーな魔法を使用することができます。

build.gradle:

apply from: "properties.gradle" // load in properties from some other file

// ... plugins, etc.

android {
    // some other sections
    productFlavors {
        dev {
            // you may want to keep some non-imported flavors.
            // maybe you're working with flavor dimension here
        }

        // ... maybe more standard flavors

        flavors.each {name, flavor -> 
            def wrapEscaped = { s -> "\"${s}\""} // simple function to wrap strings
            "$name" {
                applicationId flavor.applicationId
                versionName "${some_version_number}"

                buildConfigField "String", "MAJOR_KEY", wrapEscaped(flavor.majorKey)
                buildConfigField "String", "ANOTHER_ONE", wrapEscaped(flavor.anotherOne)
                buildConfigField "int", "PILLOW_COUNT", flavor.pillowCount

                // ... additional configs
            }
        }
    }
}

次に、参照先で次のようproperties.gradleに定義flavorsします。

ext {
  config = [
      baseId : "io.wethebest.mobile"
  ]

  flavors = [
      free    : [
          applicationId: config.baseId + ".free",
          majorKey     : "COCOA BUTTER",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 1,
      ]
      simple : [
          applicationId: config.baseId + ".simple",
          majorKey     : "A HAMMOCK",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 10,
      ],
      paid   : [
          applicationId: config.baseId,
          majorKey     : "A JETSKI",
          anotherOne   : "ANOTHER ONE",
          pillowCount  : 100000000,
      ]
  ]
}

少なくとも、これによりファイルのでフレーバーを定義できるためbuild.gradle、ふるいにかけなければならないクラフトの量を最小限に抑えることができます。さらに、主要なキーは、build.gradleファイルの改訂履歴をきれいに保ちます。

HTH、グッドラック!

于 2016-12-10T01:06:06.780 に答える