Android 签名基础知识

2023-01-29  本文已影响0人  Dapengyou

文章大纲:

Android 为什么要签名

在安装 apk 时,需要确保 apk 来源的真实性,以及 apk 没有被第三方篡改。为了解决这一问题,Android官方要求开发者对 apk 进行签名,所谓的签名就是对apk进行加密的过程。

keystore的生成:

在签名之前要生成 keystore 文件来存储密钥

(1)分阶段生成:
keytool -genkey -alias yushan(别名) -keypass yushan(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore 指定路径/yushan.keystore(指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码) 回车输入相关信息即可;

 keytool -genkey -alias test -keypass testmima -keyalg RSA -keysize 1024 -validity 365 -keystore /Users/xxx/Desktop/test.keystore   

或者:

keytool -genkey -v -keystore test.keystore -alias test -keyalg RSA -validity 365 -storepass 123456
image

(2)一次性生成:
keytool -genkey -alias test -keypass test -keyalg RSA -keysize 1024 -validity 365 -keystore 指定路径/test.keystore -storepass 123456 -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)"(中英文即可)

keystore信息的查看:

keytool -list -v -keystore test.keystore -storepass 123456

image

参数说明:

一般在公司会在项目中的 keystore 目录下创建一个 key.properties 文件,来记录 keystore 关键信息,里面的内容是:

key.store=keystore/test.keystore 
key.store.password=123456
key.alias=test
key.alias.password= testmima
key.sigalg=RSA

Android 怎么签名

通过使用 Java 自带的 keytool 和 jarsigner 工具或 apksigner 工具(android 11)进行签名。

使用 jarsigner 签名

/Library/Java/JavaVirtualMachines/xxx.jdk/Contents/Home/bin

需要进入到 jarsigner 所在的位置,通过以下命令可以对名为 test 的 apk 签名:
jarsigner -verbose -keystore test.keystore【keystore路径】 test.apk 【apk 名称】test【别名】

如何查找 jdk 位置

java -version 可以查看 java 版本
java -verbose 可以查看 jdk 路径,和其他信息
java -verbose

java -verbose

签名时遇到的问题

在android 11的设备上安装时 可能会出现:
Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary] 的问题

以上问题的原因:
是关于zip 4字节对齐,请参考zipalign

解决方法:
使用 apksigner 对其签名

假设需要被签名的文件为:source.apk

查看 apk 是否签名

查看source_4.apk 是否签名,是什么类型的签名
apksigner verify -v source_4.apk

查看 Apk 的MD5值以及MD5不显示时的解决办法

有的时候 看不到 MD5 值,可以使用命令行:
jadx-gui 目标文件.apk
中的 APK signature 查看MD5 签名、SHA-1 签名、SHA-256 签名信息

例如:


看不到 MD5 值 通过 jadx-gui 查看 MD5

xx.RSA文件是签名文件,它的命名如果不指定名称则自动截取别名中前8个字符
一般上传到市场平台的时候,被提示解析失败,没有签名文件,可能就是缺少了这个文件。

缺少 xx.RSA 文件的原因

缺少 xx.RSA 文件的原因,大概率是因为没有选中 V1 这种签名方式。

V1 vs V2

V2这种签名方案是 Android 7.0引入的,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。具体请看 这里 。 而V1适用于所有android版本的机型,但在Android7.0及以上会缺少针对未授权 APK 文件更改的保护;所以只选V2,Android7.0以下的机型会报错,同时选V1,V2,适用所有机型。

命令行打包默认 V1,V2 是都选中的,如果不放心可以在 build.gradle 里做设置

在 app 的 build.gradle 的 android 标签下加入如下:

 signingconfigs {
        debug {
            v1signingenabled true
            v2signingenabled true
        }

        release {
            v1signingenabled true
            v2signingenabled true
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读