0%

Android签名简介及客制化

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
2
cd android/development/tools
./make_key releasekey ‘/C=CN/ST=JiangSu/L=NanJing View/O=IBM/OU=Mobile/CN=xxx/emailAddress=zhangsan@ibm.com’

解读:

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
2
3
4
5
6
7
# android/build/core/config.mk
# 系统原始使用上述自定义变量的原生设计
ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
endif

可以看到我们设定的客制化路径被赋值给了 DEFAULT_SYSTEM_DEV_CERTIFICATE

而系统是通过该变量进行后续的签名相关的处理,使用客制化的路径。

2.3 签名类型设置

默认使用的是testkey,这种key只是研发阶段,而且这种密钥谁都可以使用。当发布release版本的时候,就需要release key ,防止别人盗用。

1
2
3
4
5
6
7
8
9
10
# android/build/core/Makefile
# 设置KEY类型,使用release-key
# custom release-keys modify
$(warning ------ DEFAULT_SYSTEM_DEV_CERTIFICATE = $(DEFAULT_SYSTEM_DEV_CERTIFICATE))
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/custom_security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif
# --------------------- #

重新编译工程,即可实现客制化签名。

坚持原创技术分享,您的支持将鼓励我继续创作!