gradle - 复制具有不同值的数据库密钥,用于调试与发布

时间:2014-06-12 21:07:28

标签: android gradle

- 编辑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

复制prod db值
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

1 个答案:

答案 0 :(得分:1)

您需要做的是使用dependsOnmustRunAfter创建对任务的依赖。

generateReleaseBuildConfig.dependsOn(copyStrings)

dependsOn用于在任务之间建立固定的依赖关系。当A任务取决于B任务时,B将在A之前运行(如果它不是最新的)。 mustRunAfter的工作方式略有不同。我没有强制运行任务,但是A必须在B之后运行,并且两个任务都添加到gradle调用图中时,保证B将首先运行。