美文网首页Android进阶学习
生成签名文件和签名应用(超级详细版)

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

作者: Jack_Ou | 来源:发表于2021-03-11 18:43 被阅读0次

    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/emailAddress=android@android.com'

    • 生成私钥文件: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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/gmsoqltx.html