- 编辑2 -
提出错误的问题,它是基于使用Ant功能派生的早期解决方案的机制。使用gradle可以根据build-type直接访问Resource.String值的类型,问题应该是
"如何根据构建类型为resource-api-key值提供diff值?"
使用令牌方法的副本可能在ant中起作用,但在gradle环境中似乎偏离基础。
- 仅使用gradle方法解决,而不是重新实施' ant方法'
将密钥放入配置文件......
configDbApi=..ovv
configDbRest=..eoj
configDbApiProd=..prd
configDbRestProd=..prdrest
tweek this answer在' build.gradle'类型...
defaultConfig {
resValue "string", "db_app_id", configDbApiProd
resValue "string", "db_rest_api_key", configDbRestProd
}
buildTypes {
release {
buildConfigField "String", "DBAPP", "\"DB APP RELEASE\""
resValue "string", "db_app_id", configDbApiProd
buildConfigField "String", "DBREST", "\"DB REST RELEASE\""
resValue "string", "db_rest_api_key", configDbRestProd
}
debug{ copy it,pointing to diff config prop values for $debug}
}
- 已解决结束
- OP -
我有令牌的字符串xml:
<string name="db_app_id">@configApi@</string>
<string name="db_rest_api_key">@configRest@</string>
在build.type=release
中,我想从gradle.properties
configDbApiProd=....ovv
configDbRestProd=....heoj
所以,我有一个copy
任务,我可以在堆栈中的某个地方运行“assembleRelease&#39;任务。
task copyStrings(type: Copy) {
from('config') {
include 'strings.xml'
filter(ReplaceTokens, tokens: [configApi: configDbApiProd, configRest: configDbRestProd])
}
into 'res/values'
}
...
buildTypes {
release {
// generateReleaseBuildConfig.doFirst { copyStrings }
runProguard true
proguardFile 'proguard-android-optimize.txt'
signingConfig signingConfigs.release
}
}
我的问题是如何在assembleRelease堆栈中调用此任务?
:prepareReleaseDependencies
:compileReleaseAidl
:compileReleaseRenderscript
:generateReleaseBuildConfig
:mergeReleaseAssets
:generateReleaseResValues UP-TO-DATE
:generateReleaseResources
:mergeReleaseResources
:processReleaseManifest
:processReleaseResources
:generateReleaseSources
:compileReleaseJava
:lintVitalRelease
似乎副本应该在generateReleaseBuildConfig
之后的OR之前运行
但我无法调用任务copyStrings
。
我还希望在assembleDebug
步骤中执行类似的复制,其中我使用gradle.properties
的不同属性值作为dev DB键。
- EDIT-- 在&#39; assembleDebug&#39; ...
之前更改build.gradle和任务(copyStrings)没有运行tasks.assembleRelease.dependsOn(copyStrings)
预期结果:copyStrings在assembleRelease
之前运行实际结果:在没有任何调用task = copyStrings
的情况下调用assembleRelease答案 0 :(得分:1)
您需要做的是使用dependsOn
和mustRunAfter
创建对任务的依赖。
generateReleaseBuildConfig.dependsOn(copyStrings)
dependsOn
用于在任务之间建立固定的依赖关系。当A
任务取决于B
任务时,B
将在A
之前运行(如果它不是最新的)。 mustRunAfter
的工作方式略有不同。我没有强制运行任务,但是A
必须在B
之后运行,并且两个任务都添加到gradle调用图中时,保证B
将首先运行。