数週間前に質問を投稿しました buildTypeに応じてリソースをオーバーライドする方法 。そしてちょうど昨日 AndroidのGradleプラグインリリース がありました。 G +のこの投稿 に基づいて、この質問を書くことにしました。
詳細に説明した問題:
buildType
に応じていくつかのリソース値を作成したいのですが、これは正常に動作しません。ファイル「generated.xml」は、コマンドラインで完全なビルドを行った場合にのみ作成されます。
gradlew build
しかし、私はまた、完全なプロジェクトをコマンドラインで構築することによってエラーを取得します。
* What went wrong: Execution failed for task ':app:merge<buildVariant>Resources'.
Unsupported type 'String' in file C:\Users\...\build\res\generated\release\values\generated.xml
他のすべてのビルド試行では、このファイルは作成されません。私は次のことを試しました:
奇妙なgradleコンソールの出力:
:app:generateBuildVariantResValues UP-TO-DATE
私のbuild.gradle:
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "String", "RES FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "String", "RES FOO", "RES FOO RELEASE"
}
}
私の「generated.xml」:
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from build type: release -->
<item name="RES FOO" type="String">RES FOO RELEASE</item>
私の質問:
これはバグですか、何か見落としましたか?そして、なぜこのファイルはIDE上のRebuild
によって作成されないのですか?
私のbuild.gradle(rciovatisの回答に基づいて2014-02-10を更新):
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
resValue "string", "RES_FOO", "RES FOO"
}
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "string", "RES_FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
}
2014-02-14 IT WORKSの更新:
gradleの更新Androidプラグイン すべてが正常に動作します:
/ build/res/all /に次のフォルダーが表示されます。
resValue
によって生成されたリソース値を見つけます)最初のフォルダーall
には、すべてのマージされたリソースが含まれます。方向 all/<buildVariant>/values/values.xml
私の場合、生成されたリソースが見つかります。
// for buildType DEBUG
<item name="TESTFOO" type="string">TEST FOO DEBUG</item>
// for buildType RELEASE
<item name="TESTFOO" type="string">TEST FOO RELEASE</item>
コードで値を取得するには、生成されたリソースを他のすべてのリソースと同様に使用します。
getResources().getString(R.string.TESTFOO)
defaultConfig
ブロックにもリソースを追加して解決しました。あなたにとっては次のようなものでしょう:
Android {
defaultConfig {
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
buildTypes {
debug{
buildConfigField "String", "FOO", "\"FOO DEBUG\""
resValue "string", "RES_FOO", "RES FOO DEBUG"
}
release {
buildConfigField "String", "FOO", "\"FOO RELEASE\""
resValue "string", "RES_FOO", "RES FOO RELEASE"
}
}
}
その点に注意してください:
string
ではなくString
でなければなりません編集:0.8.3以降、ビルドタイプブロックでresValueを宣言するだけで正常に動作するはずです。