服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Jenkins打包android应用时自动签名apk详解

Jenkins打包android应用时自动签名apk详解

2022-10-25 14:27coderstory Android

这篇文章主要介绍了Jenkins打包android应用时自动签名apk详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

如果你是使用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的命令行参数

Jenkins打包android应用时自动签名apk详解

参考例子

?
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/

延伸 · 阅读

精彩推荐