Android 签名基础知识

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

(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

参数说明:
  • -genkey 【生成密钥对】
  • -alias 【别名】
  • -keypass 【私钥旧密码】
  • -keyalg 【关键算法】
  • -keysize 【密钥长度】
  • -validity 【有效时长,以天为单位】
  • -keystore 【密钥存储库位置】
  • -storepass 【密钥库密码】
  • -dname 【指定证书拥有者信息】

一般在公司会在项目中的 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

  • 先进入 /Users/xxx/Library/Android/sdk/build-tools/30.0.3 路径中
  • 先删除了客户的v1签名,即删除 META-INF目录(META-INF目录下存放的是签名信息,可能报找不到META-INF/* ,不重要)
    zip -d source.apk META-INF/*
  • 获取4KB对齐apk(source_4.apk 是对齐后的结果文件)
    zipalign -v 4 source.apk source_4.apk
  • 查看是否结果文件是否对齐 (成功后会报:Verification succesful)
    zipalign -c -v 4 source_4.apk
  • 然后通过 apksigner 签名,不能在使用 jarsigner 签名
    apksigner sign --ks (签名地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
  • 密码库短语是:keystore 的 password (上文的 123456)

查看 apk 是否签名

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

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

  • 将以 .apk 结尾的 APK 文件更换为 .zip 文件
  • 解压 zip 文件找到 META-INF/xx.RSA 文件
  • 命令查看 MD5 信息
    keytool -printcert -file 【xx.RSA文件所在路径】

有的时候 看不到 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
        }
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio是一款由Google开发的集成开发环境(IDE),专门用于Android移动应用程序的开发。它提供了丰富的工具和功能,使开发者能够轻松地创建、测试和调试Android应用程序。 以下是Android Studio移动开发的基础知识: 1. 安装和设置:首先,你需要下载并安装Android Studio。安装完成后,你可以根据自己的需求进行一些基本的设置,例如选择SDK版本、配置虚拟设备等。 2. 项目结构:Android Studio使用项目结构来组织代码和资源文件。一个Android项目通常包含多个模块,每个模块都有自己的代码和资源文件。 3. 布局设计:Android Studio提供了可视化的布局编辑器,可以帮助你设计应用程序的用户界面。你可以使用拖放方式添加和调整UI组件,设置属性和样式。 4. Java编程:Android应用程序主要使用Java语言进行开发。你可以在Android Studio中编写Java代码,实现应用程序的逻辑功能。Android提供了丰富的API和类库,可以帮助你快速开发各种功能。 5. 资源管理:Android应用程序使用各种资源文件,例如图像、字符串、颜色等。在Android Studio中,你可以管理这些资源文件,并在代码中引用它们。 6. 调试和测试:Android Studio提供了强大的调试和测试工具,可以帮助你定位和修复应用程序中的错误。你可以设置断点、监视变量、查看日志等。 7. 构建和发布:最后,你需要将应用程序构建为APK文件,并发布到Google Play商店或其他渠道。Android Studio提供了构建和签名工具,可以帮助你完成这些任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值