gradle简单使用 续

本文是对上篇文章的补充,重点是gradle从其他文件中获取相关数据

从proties文件中获取数据

build.gradle:
apply plugin: 'com.android.application'
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
    ……省略很多
    manifestPlaceholders = [UMENG_CHANNEL_VALUE : "umeng",
                                UMENG_APPKEY_VALUE : properties.getProperty("umengAppKey"),
                                ]

文件中是这么写的
local.properties:

sdk.dir=/Users/lanyy/Documents/adt/sdk
umengAppKey=*************    

从xml文件中读取

可参考:http://www.infoq.com/cn/articles/android-in-depth-gradle

自定义apk名

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

buildTypes {
        release{
            signingConfig signingConfigs.myConfig
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为1.0_2015-01-15_wandoujia.apk
                        def fileName = "${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }
    }

将apk输出到指定位置

这里同样用上述的栗子,只要将最后一句

output.outputFile = new File(outputFile.parent, fileName)

修改为

output.outputFile = new File("自定义文件夹", fileName)

这个时候apk会输出到app项目下的一个叫自定义文件夹的文件夹

自动循环打包

这其实是我同事研究的成果,场景是要将服务器配置,及相关其他数据放进另外的文件中,gradle读取文件,从而打包。这里说的有点抽象,直接上代码。
首先有一个xml文件,我们把它取名为apkproperties.xml
里面的内容为

<?xml version="1.0" encoding="utf-8"?>
<apks>
    <apk name = "dev" serverpath="服务器地址" uploadfileserverip="上传ip" uploadfileserverport="上传端口">
    </apk>
    <apk name = "test" serverpath="服务器地址" uploadfileserverip="上传ip" uploadfileserverport="上传端口">
    </apk>
    <apk name = "demo"serverpath="服务器地址" uploadfileserverip="上传ip" uploadfileserverport="上传端口">
    </apk>
</apks>

gradle这么写

productFlavors {
    
 
        //def apks = new XmlParser().parseText(xml)
        def xmlFile = file('apkproperties.xml')
        def file = file(xmlFile.absolutePath)
        def apks = new XmlParser().parse(file.path)

        apks.apk.each{
            def name = it.'@name'
            def serverpath = it.'@serverpath'
            def uploadfileserverip = it.'@uploadfileserverip'
            def uploadfileserverport = it.'@uploadfileserverport'
            
            
            "${name}"({
                manifestPlaceholders = [SERVER_PATH_VALUE: "$serverpath",UPLOAD_FILE_SERVER_IP_VALUE: "$uploadfileserverip",UPLOAD_FILE_SERVER_PORT_VALUE: "$uploadfileserverport"]
            }
            )
        }
    
    }

这样就能自动打出三个,分贝demo,dev,test不同环境的包了。
其实gradle是十分灵活的,熟练他的语法才能创造出更加灵活的打包方式!

参考:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/

    原文作者:baifannn
    原文地址: https://www.jianshu.com/p/74d32266b6d5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞