可以使用三种方式来通过gradle改变项目信息。
编译时动态改变Manifest
例如,在manifest下配置友盟的渠道:
复制代码
然后在gradle的 product flavor 中写上:
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "GooglePlay"]复制代码
在编译后value的值就会变为GooglePlay了。
编译时动态改变resValue
在你的 gradle 内容 buildTypes 或者 productFlavors 下面,如 release 体内写上类似:
resValue "string", "AppName", "imag"复制代码
这样就可以修改,strings.xml
编译时动态改变BuildConfig
要想通过编译生成代码中可以获取的数据,那我们需要通过一个介质。那就是BuildConfig类。
他是编译的时候动态生成的。 在相同的地方添加:buildConfigField "String", "name", "\"value\""复制代码
在项目中可以这样使用build.gradle
通过读取一个配置文件,来改变java代码中属性的值。
文件相对路径为“../script/build.properties”,内容如下:
appName=testversionCode=5.0.0mapApiKey=CeFoDLBAGKbbvpa4EFTiFuugpPjdxT1f复制代码
那么就可以通过读取这个文件来进行配置了:
//声明文件路径def pFile = file("../script/build.properties")def Properties p = new Properties()//读取文件内容def loadProperties = { pFile.withInputStream { stream-> InputStreamReader read = new InputStreamReader(stream, "utf-8"); BufferedReader bf = new BufferedReader(read); p.load(bf) }}android { buildTypes { //正式打包 release { loadProperties() //动态创建res-values值 resValue "string", "app_name", p.appName //动态创建常量 buildConfigField 'String', 'versionCode', '"' + p.versionCode + '"' //动态创建manifest中meta的值 manifestPlaceholders = [MAP_API_KEY:p.mapApiKey] }}复制代码
读取文件夹下的文件名称,动态加载arr库文件
def loadPluginNames = { String pluginNames = ""; def pluginFiles = file('../plugins').listFiles().sort() pluginFiles.each { File file -> if (file.isFile()) { String baseName = file.name.subSequence(0, file.name.indexOf('.')); String pluginName = baseName.replaceAll('(Plugin)$', ''); pluginNames = pluginNames + pluginName + "," } } return pluginNames;}//引入aar插件fileTree(dir: 'plugins', include: '**/*.aar').each { File file -> dependencies.add("compile", [ name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..