Build.gradleではなくstrings.xmlファイルで、アプリのさまざまなフレーバーを定義することに興味があります。複数のフレーバーがあるので、単純化されたリリース/デバッグバリアントが必要です。
buildTypes {
release {
signingConfig signingConfigs.release
resValue "string", "app_name", "@string/prod_name"
}
debug {
applicationIdSuffix ".beta"
resValue "string", "app_name", "@string/beta_name"
}
次に、ビルドフレーバーのカスタムres/values/strings.xmlファイルのそれぞれで、それぞれ独自の「prod_name」と「beta_name」を定義します。また、プロバイダーの権限などを定義するために、この同様のフレームワークを使用したいと思います...
これは現在、gradleコマンドラインを介して正常にビルドされますが、Android Studioでは認識されません。
Android Studioエラー:
これは「generated.xml」内にあります
<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>
これは、ある文字列が別の文字列を参照する方法の典型です。しかし、今回はAndroid Studioでこのエラーが発生します:
Error:(7, 29) No resource found that matches the given name
(at 'app_name' with value '@string/beta_name').
私はAndroid Studio2.1プレビュー5を使用しています
私の経験では、resValue
DSLの@string/my_string
を解決することはできません。 Gradleは、値を単純な文字列としてリソースファイル内に配置します。
この場合、別のフォルダーを使用してそれを実現できます。
使用するだけです:
src/release/res/values/strings.xml
src/debug/res/values/strings.xml
ビルドバリアント(ビルドタイプ+フレーバー)ごとに異なるリソースを使用する場合は、次を使用できます。
src/flavor1Release/res/values/strings.xml
src/flavor1Debug/res/values/strings.xml
src/flavor2Release/res/values/strings.xml
src/flavor2Debug/res/values/strings.xml
これは実際に可能です。次のように、defaultConfigでこれらの文字列を空として宣言するだけです。
defaultConfig {
resValue "string", "prod_name", ""
resValue "string", "beta_name", ""
}
ビルドフレーバーのGradle内にres値を追加できる可能性があります
productFlavors {
prod {
dimension "default"
resValue "string", "app_name", "your prod app name"
}
staging {
dimension "default"
resValue "string", "app_name", "your staging app name"
}
}