前言
如果你是使用android studio编译项目的化,在编译apk只会会自动给apk签名。
但默认配置下jenkins下编译出的apk是unsign的。需要一些额外的设置才能自动sign。
这个功能需要我们修改下build.gradle配置文件,让gradle在编译之后执行签名。
当然你也可以在这里做一些其他的修改,比如修改编译出的apk的名字,让他加个当前时间的时间戳,编译类型的后缀什么的,方便识别。
1.生成的apk名加上当前时间 + 修改apk的发布路径
在build.gradle配置文件下的android配置段下的buildTypes下找到你的编译配置项一般就是release
在release段下面加上如下代码
1
2
3
4
5
6
7
8
9
10
|
applicationVariants.all { variant -> if (variant.buildType.name.equals( 'release' )) { //如果是release版本 variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith( '.apk' )) { //查找所有的apk def fileName = "${releaseTime()}_XXXXPorject_${defaultConfig.versionName}.apk" //重新定义apk的名称 output.outputFile = new File(outputFile.parent, fileName) //outputFile.parent参数可以改成你你想要的发布路径 } } } } |
然后在build.gradle配置文件的末尾加上一个方法用来获取当前时间
1
2
3
4
|
def releaseTime() { // return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日 return new Date().format( "yyyyMMdd HH-mm-ss" , TimeZone.getTimeZone( "GMT+8:00" )) //年月日时分秒 } |
2.实现自动化签名 别忘了jks文件也要放项目里
build.gradle的android段添加如下配置段 定义签名key
1
2
3
4
5
6
7
8
|
signingConfigs { //签名的配置 release { storeFile file( "签名.jks" ) storePassword '密码' keyAlias '别名' keyPassword '密码' } } |
在android配置段下的buildTypes段的release段下添加一行 表示调用上面的签名配置
注意修改apk的名字后在android studio是无法开启调试模式,提示找不到apk
signingConfig signingConfigs.release
效果图
第一个是debug版本
第二个是没签名的release版本
第三个是签名后还改了名字的release版本
如果想编译某个版本的话 需要修改下执行gradle的命令行参数
参考例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '24.0.3' defaultConfig { applicationId "com.coderstory.Purify" minSdkVersion 19 targetSdkVersion 25 versionCode 90 versionName "1.5.0" resConfigs "cn" } repositories { mavenCentral() } signingConfigs { //签名的配置 release { storeFile file( "mykey.jks" ) storePassword 'a1234' keyAlias 'coolapk' keyPassword 'b1234' } } buildTypes { release { shrinkResources true minifyEnabled true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile( 'proguard-android.txt' ), 'proguard-rules.pro' applicationVariants.all { variant -> if (variant.buildType.name.equals( 'release' )) { //如果是release版本 variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith( '.apk' )) { //查找所有的apk def fileName = "MIUI Purify_${releaseTime()}_${defaultConfig.versionName}.apk" //重新定义apk的名称 output.outputFile = new File(outputFile.parent, fileName) //outputFile.parent参数可以改成你你想要的发布路径 } } } } } } productFlavors { } lintOptions { abortOnError false } } dependencies { provided fileTree(include: [ '*.jar' ], dir: 'libs' ) compile project( ':library' ) compile project( ':pull' ) compile 'com.android.support:support-v4:25.0.1' compile 'com.android.support:appcompat-v7:25.0.1' compile 'com.android.support:design:25.0.1' testCompile 'junit:junit:4.12' provided 'de.robv.android.xposed:api:82' } def releaseTime() { // return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日 return new Date().format( "yyyyMMdd HH-mm-ss" , TimeZone.getTimeZone( "GMT+8:00" )) //年月日时分秒 } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.coderstory.cn/jenkins-gradle-%E5%AE%9E%E7%8E%B0%E6%89%93%E5%8C%85android%E5%BA%94%E7%94%A8%E5%B9%B6%E8%87%AA%E5%8A%A8%E7%AD%BE%E5%90%8Dapk/