android应用的持续构建CI(三)-- 手动签名

一、背景

关于android应用的签名及其原理,很多文章都有讲述,无意重复赘述。

本文紧接上文,站在运维的角度,对开发是透明的。

但是它又和gradle build 构建动作是紧密相关的。

第一步使用jdk的keytool生成证书文件,第二步调用android构建工具apksigner,对构建好的apk文件进行签名。(参考链接地址:manually-signing-the-apk

二、生成keystore证书

1、手动生成keystore证书

$ keytool -genkeypair -v -keystore xample.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  Ham Chimpanze
What is the name of your organizational unit?
  [Unknown]:  NASA
What is the name of your organization?
  [Unknown]:  NASA
What is the name of your City or Locality?
  [Unknown]:  Cape Canaveral
What is the name of your State or Province?
  [Unknown]:  Florida
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: CN=Ham Chimpanze, OU=NASA, O=NASA, L=Cape Canaveral, ST=Florida, C=US
Enter key password for <publishingdoc>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing xample.keystore]

这是手动生成keystore证书文件,属于交互式的操作。
当使用shell命令生成keystore证书文件时,需进行适当的转换。

2、shell命令生成keystore证书

/opt/keystore.sh ${apkName} 证书文件名与apk的名称保持一致,别名是publishingdoc,密码是123456hello

expect <<!
spawn keytool -genkeypair -v -keystore $1.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000 -keystore ./$1.keystore
expect "Enter keystore password:"
send "123456hello\r"
sleep 1
expect "Re-enter new password:"
send "123456hello\r"
sleep 1
send "Ham Chimpanze\r"
sleep 1
send "NASA\r"
sleep 1
send "NASA\r"
sleep 1
send "Cape Canaveral\r"
sleep 1
send "Florida\r"
sleep 1
send "US\r"
sleep 1
send "yes\r"
sleep 1
send "\r"
sleep 1
expect eof
!
sleep 1

如此,便不需要人工与之交互,就可以生成keystore证书文件了。

  • 生成的xxx.keystore文件,存在于jenkins服务器的目录下
    在这里插入图片描述

三、android应用程序的配置

前文说了,开发是不能知道keystore文件信息的,生成过程交由jenkins服务器完成。

而gradle打包完成后,对应用签名的时候,是需要知道keystore证书所在以及密码。

所以,我们新建一个properties配置文件,jenkins服务器负责写入该配置文件,android应用程序只需要读取该配置文件。

配置文件apk.properties的格式如下:

## xxx是应用名称
APK_NAME=xxx.apk
APK_DIR=/opt/apks
STORE_FILE=/opt/keystore/xxx.keystore
STORE_PASSWORD=123456hello
KEY_ALIAS=publishingdoc
KEY_PASSWORD=123456hello

1、android代码

  • apk.gradle
    在这里插入图片描述
  • build.gradle

在这里插入图片描述

android {
	signingConfigs {
        release {
        }
    }
    buildTypes {
        debug {
            # 编译debug版本时,暂不签名
        }
        release {
            # 编译release版本时,自动签名
            signingConfig signingConfigs.release
            
        }
    }
}

2、properties配置文件

这里想补充一下,写入properties配置文件的两种方式:

  • 简单粗暴地拼接文本内容
  • 基于模板的变量替换

先创建一个模板文件,然后对其变量进行替换。

cp apk.properties.tpl apk.properties

# 替换变量的示例
sed -i -e "s|APK_NAME=|APK_NAME=$1.apk|" apk.properties
sed -i -e "s|STORE_FILE=/opt/keystore/|STORE_FILE=/opt/keystore/$1.keystore|" apk.properties

四、总结

android应用程序的打包,总是绕不开应用签名。

本文仅从运维的角度,梳理了其如何生成和使用的步骤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天草二十六_简村人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值