Android gradle-复制具有不同值的db键,用于调试和发布
--编辑2-- 这个问题问错了,它是基于早期使用Ant的能力推导出的解决方案的机制。gradle提供了对资源风格的直接访问。字符串值取决于,问题应该是 “如何根据生成类型为资源api键值提供差异值?” 使用令牌的复制方法可能在ant中有效,但在gradle环境中似乎有点偏离基准 --仅使用gradle方法解决,而不是重新实现“ant方法” 将密钥放入配置文件Android gradle-复制具有不同值的db键,用于调试和发布,android,gradle,Android,Gradle,--编辑2-- 这个问题问错了,它是基于早期使用Ant的能力推导出的解决方案的机制。gradle提供了对资源风格的直接访问。字符串值取决于,问题应该是 “如何根据生成类型为资源api键值提供差异值?” 使用令牌的复制方法可能在ant中有效,但在gradle环境中似乎有点偏离基准 --仅使用gradle方法解决,而不是重新实现“ant方法” 将密钥放入配置文件 configDbApi=..ovv configDbRest=..eoj configDbApiProd=..prd configDbRe
configDbApi=..ovv
configDbRest=..eoj
configDbApiProd=..prd
configDbRestProd=..prdrest
“build.gradle”类型中的tweek
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>
因此,我希望在“assembleRelease”任务堆栈中的某个地方运行一个copy
任务
task copyStrings(type: Copy) {
from('config') {
include 'strings.xml'
filter(ReplaceTokens, tokens: [configApi: configDbApiProd, configRest: configDbRestProd])
}
into 'res/values'
}
我的问题是如何将此任务作为assembleRelease堆栈的一部分调用
:prepareReleaseDependencies
:compileReleaseAidl
:compileReleaseRenderscript
:generateReleaseBuildConfig
:mergeReleaseAssets
:generateReleaseResValues UP-TO-DATE
:generateReleaseResources
:mergeReleaseResources
:processReleaseManifest
:processReleaseResources
:generateReleaseSources
:compileReleaseJava
:lintVitalRelease
似乎副本应该在generateReleaseBuildConfig
但是我无法调用任务copyStrings
我还想在assembleDebug
步骤中做一个类似的复制,在该步骤中,我使用了dev DB键gradle.properties
中的不同属性值
--编辑--
更改build.gradle和在“AssembledBug”之前未运行的任务(copyStrings)
tasks.assembleRelease.dependsOn(copyStrings)
预期结果:copyStrings在assembleRelease之前运行
实际结果:在不调用task=copyStrings的情况下调用assembleRelease,您需要做的是使用
dependsOn
和mustRunAfter
创建对任务的依赖关系
generateReleaseBuildConfig.dependsOn(copyStrings)
dependsOn
用于在任务之间建立固定的依赖关系。当A
任务依赖于B
任务时,B
将在A
之前运行(如果它不是最新的)mustRunAfter
的工作原理有点不同。我不强制运行任务,但是当a
必须在B
之后运行,并且两个任务都添加到gradle调用图中时,可以保证B
将首先运行 添加了对我的任务“copyStrings”的“assembleRelease”依赖项,并且我的任务未被调用
tasks.assembleRelease.dependsOn(copyStrings)
generateReleaseBuildConfig.dependsOn(copyStrings)