其他分享
首页 > 其他分享> > Android-Gradle-自动化多渠道打包(1),看完豁然开朗

Android-Gradle-自动化多渠道打包(1),看完豁然开朗

作者:互联网

 cmd.execute().waitForProcessOutput(System.out, System.err)
println 'packers===excute VasDolly reBuildChannel'

}


## 敏感信息存取

我们都知道,签名需要签名文件,密码、别名等等文件,360加固需要配置账号与密码,这些都属于敏感信息,google官方不建议直接放在gradle中,它是以纯文本记录在gradle中的,建议存储在properties文件中。

// 把敏感信息存放到自定义的properties文件中
def propertiesFile = rootProject.file(“release.properties”)
def properties = new Properties()
properties.load(new FileInputStream(propertiesFile))

ext {
// 签名配置
signing = [keyAlias : properties[‘RELEASE_KEY_ALIAS’],
keyPassword : properties[‘RELEASE_KEY_PASSWORD’],
storeFile : properties[‘RELEASE_KEYSTORE_PATH’],
storePassword: properties[‘RELEASE_STORE_PASSWORD’]
]

// app相关的配置
app = [
        //默认release apk的文件路径,因为加固是基于release包的
        releasePath : "${project.buildDir}/outputs/apk/release",
        //对release apk 加固后产生的加固apk地址
        packersPath : "${project.buildDir}/outputs/packers",
        //加固后进行腾讯多渠道打包的地址
        channelPath : "${project.buildDir}/outputs/channels",
        //腾讯VasDolly多渠道打包jar包地址
        vasDollyPath: "../VasDolly.jar"
]

// 360加固配置
packers = [account          : properties['ACCOUNT360'], //账号
           password         : properties['PASSWORD360'],  //密码
           zipPath          : "${project.rootDir}/jiagu/360jiagu.zip",  //加固压缩包路径
           unzipPath        : "${project.rootDir}/jiagu/360jiagubao/",  //加固解压路径
           jarPath          : "${project.rootDir}/jiagu/360jiagubao/jiagu/jiagu.jar",  //执行命令的jar包路径
           channelConfigPath: "${project.rootDir}/jiagu/Channel.txt",  //加固多渠道
           jiagubao_mac     : "https://down.360safe.com/360Jiagu/360jiagubao_mac.zip",  //加固mac下载地址
           jiagubao_windows : "https://down.360safe.com/360Jiagu/360jiagubao_windows_64.zip" //加固widnows下载地址
]

## gradle相关基础

*   gradle脚本插件的引用

apply from: “${project.rootDir}/packers.gradle”


*   局部变量

def dest = “A”


*   扩展属性

使用ext扩展块,一次扩展多个属性
ext {
account = “XXXX”
password = “XXXXX”
}


*   字符串相关

单引号不支持插值
def name = ‘张三’
双引号支持插值
def name = “我是${‘张三’}”
三个单引号支持换行
def name = “”"
张三
李四
“”"


*   可有可无的圆括号

// 这两种写法等价
println(‘A’)
println ‘A’


*   闭包作为方法的最后一个参数

repositories {
println “A”
}
repositories() { println “A” }
repositories({println “A” })


*   task依赖

task B {
// TaskB依赖TaskA,故会先执行TaskA
dependsOn A
//其次执行packersRelease
doLast {
println “B”
}
}


*   task排序

//taskB必须总是在 taskA 之后运行, 无论 taskA 和 taskB 是否将要运行
taskB.mustRunAfter(taskA)
//没有msut那么严格
taskB.shouldRunAfter (taskA)


*   文件定位

// 使用一个相对路径
File configFile = file(‘src/config.xml’)
// 使用一个绝对路径
configFile = file(configFile.absolutePath)
// 使用一个项目路径的文件对象
configFile = file(new File(‘src/config.xml’))`


*   文件遍历

// 对文件集合进行迭代
collection.each {File file ->
println file.name
}


*   文件复制重命名

copy {
from 源文件地址
into 目标目录地址
rename(“原文件名”, “新文件名字”)
}

## 自动上传到服务器

这个功能准备在下篇文章更新,我们可以通过curl命令上传到自己的服务器,如果你在测试阶段可以上传到蒲公英或者fir.im托管平台,目前他们都提供了相关的操作方式,这样基本上整个自动化的目的就完成了,当然你也可以选择Jenknis自动化构建、打包及上传。

*   发布应用到fir.im托管平台 [入口]( )

方式一:fir-CLI 命令行工具上传
$ fir p path/to/application -T YOUR_FIR_TOKEN
方式二:API 上传
通过curl命令调用相关的api
1.获取凭证
curl -X “POST” “http://api.bq04.com/apps”
-H “Content-Type: application/json”
-d “{“type”:“android”, “bundle_id”:“xx.x”, “api_token”:“aa”}”
2.上传apk
curl -F “key=xxxxxx”
-F “token=xxxxx”
-F “file=@aa.apk”
-F “x:name=aaaa”
-F “x:version=a.b.c”
-F “x:build=1”
-F “x:release_type=Adhoc” \ #type=ios 使用
-F “x:changelog=first”
https://up.qbox.me


*   发布应用到蒲公英 [入口]( )

curl -F “file=@/tmp/example.ipa” -F “uKey=” -F “_api_key=” https://upload.pgyer.com/apiv1/app/upload


![](https://upload-images.jianshu.io/upload_images/23319472-e293fdcb57cbae8a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


## 整体效果

我们的需求是需要打两批包,用于老后台与新后台,老后台的包必须加上app-前缀,所以有三个任务`packersNewRelease`执行正常的加固打包用于新后台,`packersOldRelease`用于打包加前缀app-名称用于老后台,`packersRelease`这个任务用于一键同时打包成老后台与新后台。

![](https://upload-images.jianshu.io/upload_images/23319472-180cba42d782c309.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


同时可以在gradle控制台查看打包任务的输出日志,如下:

![](https://upload-images.jianshu.io/upload_images/23319472-653923c8930019c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


## gradle自动化源码

为了能够让大家尝试自动化gradle脚本带来的便利之处,下面我贡献上自己的整个gradle源码,需要的可以拿走去研究,如存在问题也希望多多交流。

/**

// 把敏感信息存放到自定义的properties文件中
def propertiesFile = rootProject.file(“release.properties”)
def properties = new Properties()
properties.load(new FileInputStream(propertiesFile))

ext {
// 签名配置
signing = [keyAlias : properties[‘RELEASE_KEY_ALIAS’],
keyPassword : properties[‘RELEASE_KEY_PASSWORD’],
storeFile : properties[‘RELEASE_KEYSTORE_PATH’],
storePassword: properties[‘RELEASE_STORE_PASSWORD’]
]

// app相关的配置
app = [
        //默认release apk的文件路径,因为加固是基于release包的
        releasePath : "${project.buildDir}/outputs/apk/release",
        //对release apk 加固后产生的加固apk地址
        packersPath : "${project.buildDir}/outputs/packers",
        //加固后进行腾讯多渠道打包的地址
        channelPath : "${project.buildDir}/outputs/channels",
        //腾讯VasDolly多渠道打包jar包地址
        vasDollyPath: "../VasDolly.jar"
]

// 360加固配置
packers = [account          : properties['ACCOUNT360'], //账号
           password         : properties['PASSWORD360'],  //密码
           zipPath          : "${project.rootDir}/jiagu/360jiagu.zip",  //加固压缩包路径
           unzipPath        : "${project.rootDir}/jiagu/360jiagubao/",  //加固解压路径
           jarPath          : "${project.rootDir}/jiagu/360jiagubao/jiagu/jiagu.jar",  //执行命令的jar包路径
           channelConfigPath: "${project.rootDir}/jiagu/Channel.txt",  //加固多渠道
           jiagubao_mac     : "https://down.360safe.com/360Jiagu/360jiagubao_mac.zip",  //加固mac下载地址
           jiagubao_windows : "https://down.360safe.com/360Jiagu/360jiagubao_windows_64.zip" //加固widnows下载地址
]

}

/**

/**

/**

/**

/**

标签:jiagu,豁然开朗,Gradle,println,360,加固,Android,properties,packers
来源: https://blog.csdn.net/m0_61072670/article/details/120131667