关于gradle 多样化build app;
productFlavors { demo1 { applicationId "com.mxx" manifestPlaceholders = ["com.placeholder": "com.mxx", "placeholder.debug": "true"] //versionCode = 1; minSdkVersion 17 proguardFile 'C:/androidStudioWorkspace/HSBCHybridApp_3Q20140518/HSBCHybridApp_3Q2014/proguard-rules.txt' signingConfig signingConfigs.config targetSdkVersion 21 } demo2 { applicationId "com.mxx"manifestPlaceholders = ["com.placeholder": "com.mxx", "placeholder.debug": "true"]}}
在productFalvors 里面可以设置各种各样的build 以上是2个例子
其中manifestPlaceholders 是用来替换manifest的站位符,这样方便 只使用一个manifest.xml 来build出不同的app同样也可以替换string.xml里面的占位符:gradle 没有提供相应的方法 但是可以使用DSL语言来实现:String app_name = "\\u0024\\u007com.mike.appname\\u007D"def replaceInString = { variant, fromString, toString -> File valuesFile = file("${buildDir}/intermediates/res/merged/${variant.dirName}/values/values.xml") println "Replacing revision number in " + valuesFile String content = valuesFile.getText('UTF-8') content = content.replaceAll(fromString, toString) valuesFile.write(content, 'UTF-8') } android.applicationVariants.all { variant -> variant.mergeResources.doLast { String variantString = variant.dirName println "dir name " + variantString if (variantString.contains("demo1")) { replaceInString(variant, app_name, "mxxtc110) } } } }这样就替换了 string.xml里面的站位符 ${com.mike.appname} 变成mxxtc110提醒一下gradle build 会将string.xml 生成到一个value.xml下面 我们并没有改变string.xml 而是改变了gradle生成的中间文件.