web-dev-qa-db-ja.com

既存の文字列定義を使用して「resValue」を定義する

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を使用しています

12
FishStix

私の経験では、resValueDSLの@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
8

これは実際に可能です。次のように、defaultConfigでこれらの文字列を空として宣言するだけです。

defaultConfig {
    resValue "string", "prod_name", ""
    resValue "string", "beta_name", ""
}
7
steffandroid

ビルドフレーバーの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"    

    }
}
0
Sibin