生成签名文件和签名应用(超级详细版)

1.签名文件简介

签名文件说明出处,标准的测试秘钥包含四个部分:testkey、platform、shared和media。

The following standard test keys are currently included:

testkey -- a generic key for packages that do not otherwise specify a key.
platform -- a test key for packages that are part of the core platform.
shared -- a test key for things that are shared in the home/contacts process.
media -- a test key for packages that are part of the media/download system.

  • testkey是没有指定特定秘钥的通用秘钥,可以用于开发阶段的普通apk签名(没有签名系统可能会在安装的时候就报错,不让安装)
  • platform主要用于平台app做签名,例如某个平台app需要访问到@SystemApi或者@hide注解的方法,就需要使用platform文件来签名应用。
  • shared 用于一些要共享数据应用数据的应用签名
  • media 用于媒体和系统下载应用签名

2.签名文件的生成

2.1命令行生成方式

  • 生成秘钥对:openssl genrsa -3 -out testkey.pem 2048

  • 生成pem格式的证书:openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'

  • 生成私钥文件:openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt

2.2脚本生成证书方式

在源码development/tools/目录中,有一个make_key脚本,可以使用这个脚本来生成证书

Step 1:cd到development/tools/目录

Step 2:运行make_key脚本: sudo ./make_key platform '/C=CN/ST=YourProvince/L=YourLocation/O=YourOrganization/OU=YourOrganizationalUnit/CN=YourName'

说明:testkey是生成的文件名,后面是证书里面的内容

参数 说明
/C 国家代号
/ST 省份代号
/L 位置代号
/O 组织代号
/OU 单位代号
/CN 名称

Step 3:输入自定义密码

此时就会生成:platform.x509.pem和platform.pk8

此时就可以使用out/host/linux-x86/framework/目录下的signapk.jar包来对apk进行签名了

2.3 生成signapk.jar

  • 在源码根目录使用source build/envsetup.sh创建指令环境
  • 进入/build/tools/signapk/目录
  • 执行指令:mm
  • 在out/host/linux-x86/framework/目录找到signapk.jar

3.对apk进行签名

3.1 使用指令签名

如果使用原生的证书,目录在/build/target/product/security/中可以找到platform.pk8 platform.x509.pem文件,如果有我们上面生成的也可以。

将要打包的apk、证书和signapk.jar放到一个目录。

java -jar signapk.jar  platform.x509.pem platform.pk8 old.apk new.apk

3.2 使用Android Studio签名

要使用Android Studio对应用自动签名,需要生成.jks的证书,该二进制格式的证书,同时包含证书和私钥,一般有密码保护。

如果是没有密码的pem格式的证书生成.jks文件方式如下:

  • 生成platform.pem文件
    openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
  • 生成platform.p12文件,设置别名和密码,即AS打包APK时输入的别名和密码
    openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name key
  • 生成platform.jks(钥匙文件) (-srcstorepass android)是.jks文件的密码
    keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

有密码的pem格式的证书生成.jks文件的方式:

假如密码是:c6a04bdc7236f5d18c75840f50dee482b36ad4cc

  • 生成platform.pem文件

    openssl pkcs8 -inform DER -passin pass:c6a04bdc7236f5d18c75840f50dee482b36ad4cc -in platform.pk8 -out platform.pem

  • 生成platform.p12文件,设置别名和密码,即AS打包APK时输入的别名和密码

    openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:android -name key

  • 生成platform.jks(钥匙文件) (-srcstorepass android)是.jks文件的密码

    keytool -importkeystore -deststorepass android -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

生成.jks文件之后,导入as中,编译工程的时候,选择Generate Signed Bundle or APK按照上面生成输入的昵称和密码一直下一步就可以完成工程签名了。

4.验证是否签名成功

  • 将apk直接用zip等解压工具直接解压到本地目录
  • 进入到META-INF目录找到:CERT.RSA文件
  • META-INF目录打开控制台输入:keytool -printcert -file CERT.RSA 即可看到签名文件的输出
签名文件内容.png

你可能感兴趣的:(生成签名文件和签名应用(超级详细版))