Android签名简介及客制化
1. 签名简介
1.1 签名类型
- releasekey(testkey)
- media
- shared
- platform
其中shared.pk8代表私钥
shared.x509.pem代表公钥 (一定成对出现)
其中testkey是android编译的时候默认的签名key,这种key只是研发阶段,而且这种密钥谁都可以使用。当发布release版本的时候,就需要release key ,防止别人盗用。
Android平台默认签名文件存放路径为:
build/target/product/security
1.2 生成key的步骤
以releasekey为例,Android使用SHA1-RSA算法进行签名。
可以在源码下/development/tools/make_key 来实现:
命令示例:
1 | cd android/development/tools |
解读:
releasekey –> 签名类型
C=CN–>国家名字
ST=JiangSu–>省城市名字
L=NanJing–>城市名字
View/O=IBM公司名称
OU=Mobile–> 部门名称或项目名称
CN=lumeng–>制作者名称
emailAddress=zhangsan@ibm.com–>制作者邮箱地址
注意:制作的过程当中会让输入密码,如无特殊需求,此步建议直接enter跳过,否则每次签名apk,还需要手动输入签名密码。
其他类型签名制作过程类似,只需修改签名类型即可。
1.3 如何签名
如需手动对apk进行签名,可通过如下命令:
1 | java -jar signapk.jar releasekey.x509.pem releasekey.pk8 input.apk output.apk |
signapk.jar 可以编译build/tools/signapk/ 得到(编译后,在android/out/host/linux-x86/framework里获取)
releasekey.x509.pem releasekey.pk8 即为上述制作的签名文件releasekey类型的私钥公约对
input.apk 需进行签名的apk文件
output.apk 签名后的输出文件名
2. Android源码级别客制化签名
上面我们提到过,Android系统源码中,默认签名文件存放路径为:build/target/product/security
如需客制化,首先需要按上述介绍的方法,制作一套新的签名文件,可放在工程任意路径。
这里为了下面讲述方便,我们假设客制化路径为: build/target/product/custom_security/
2.1 赋值PRODUCT_DEFAULT_DEV_CERTIFICATE
1 | PRODUCT_DEFAULT_DEV_CERTIFICATE := build/target/product/custom_security/releasekey |
1 | # android/build/core/config.mk |
可以看到我们设定的客制化路径被赋值给了 DEFAULT_SYSTEM_DEV_CERTIFICATE
而系统是通过该变量进行后续的签名相关的处理,使用客制化的路径。
2.3 签名类型设置
默认使用的是testkey,这种key只是研发阶段,而且这种密钥谁都可以使用。当发布release版本的时候,就需要release key ,防止别人盗用。
1 | # android/build/core/Makefile |
重新编译工程,即可实现客制化签名。