当前位置: 首页 > 工具软件 > Buildapp > 使用案例 >

gradle 笔记 (多样化build app)

萧和同
2023-12-01

关于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生成的中间文件.

 类似资料: