Android apk签名

本文介绍了Android应用的数字签名流程及重要性,包括使用keytool生成证书、jarsigner进行签名以及zipalign优化的方法。此外,还阐述了签名在Android系统中的作用以及Apk安装的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

Android系统要求所有的应用必须被证书进行数字签名后,才能进行安装。
Android系统通过证书来确认应用的开发者,该证书是不需要权威机构认证的,一般情况下是开发者自签名证书,确保应用程序与作者之间建立信任关系。

在Androind应用开发期间,由于是以Debug模式进行编译,因此ADT会自动用默认的秘钥和证书来签名。
  • 注意事项:
    1. Android所有的应用程序必须有数字证书签名;
    2. Android系统中,系统App使用的是平台证书签名,第三方app一般是开发者的自签名证书。
    3. Release版本的第三方app必须使用相同的证书进行签名,否则Android系统会认为是两个不同的App。
    4. 数字证书是存在有效期的,如果数字证书超期失效,这应用无法安装、升级。
    5. Android提供了基于签名的权限机制。使用相同签名的应用程序间可以共享数据或者代码,这些应用程序必须运行在同一个进程中。

keytool生成证书

keytool是java数字证书管理攻击,使用keytool生成Android数字签名证书。
keytool将秘钥和证书存放在一个称为keystore的文件中。

JDK中带有keytool,地址$JAVA_HOME/bin。

下载地址:https://ibotpeaches.github.io/Apktool/

  • 命令行:
# 生成证书
keytool -genkey -v -alias alias_name -keyalg RSA -storetype PKCS12 -keysize 2048 -validity 365 -keypass root123 -storepass root123 -keystore my_release_key.keystore

# 参数解析
- genkey:   生成证书
- v:        显示密钥中的证书详细信息
- keystore: 指定生成数字签名证书的文件名和路径
- alias:    指定证书的别名
- keyalg:   指定生成证书所需要的算法,(如DSARSA,默认是DSA- keysize:  指定秘钥的长度(默认是1024)
- validity: 指定证书的有效期,单位为天(默认是90- keypass:  指定别名条目的密码(私钥的密码)
- storepass:    指定私钥库的密码(获取keystore信息所需的密码)

# 查看证书信息
keytool -list -v -keystore my_release_key.keystore -storepass root123 -storetype PKCS12         # 以可读方式输出证书
或 keytool -list -rfc -keystore my_release_key.keystore -storepass root123 -storetype PKCS12    # 以可打印方式输出证书

# 导出证书
keytool -export -rfc -alias alias_name -keystore my_release_key.keystore -storetype PKCS12 -file my_release_key.cer -storepass root123

# 查看.cer文件
keytool -printcert -rfc -file my_release_key.cer

jarsigner签名

jarsigner是java程序(Java归档Jar文件)签名的工具,使用jarsigner给android应用签名。

JDK中带有jarsigner,地址$JAVA_HOME/bin。

  • 命令行:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my_release_key.keystore my_application-release-unsigned.apk alias_name

# 命令行解析
- sigalg:       签名算法的名称
- digestalg:    摘要算法的名称
- keystore:     指定签名证书的位置
- alias_name:   签名证书的别名

zipalign对齐优化

zipalign优化工具是Android SDK中自带的apk优化工具。

它对Apk文件进行存档对齐,确保所有未压缩的数据都从文件的开始位置以指定的对齐方式(以4字节对比)排列,减少应用程序的RAM内存资源消耗,提高了优化后的Applications与Android系统的交互效率,从而使整个系统的运行效率有较大的提升。

Zipalin优化的最根本目的是帮助操作系统更搞笑的根据请求索引资源,将resource-handing code统一为Data structure alignment(数据结构对齐标准:DSA)限定为4-byte。

地址$ANDROID_HOME/build-tools/版本号/。

  • 命令行
# 不受API level的限制,可以对任何版本的apk执行Align优化
zipalign -v 4 your_project_name_unaligned.apk your_project_name.apk 

# 查看当前apk是否经过Align优化
zipalign -c -v 4 your_project_name.apk

Apk的安装过程

Android系统中,Application的数据都保存在它的apk文件中,同时可以被多个进程访问。

  • App安装过程包括以下几步:
    1. Installer通过每个apk的manifest文件获取与当前应用程序相关联的permission信息
    2. Home application读取当前apk的name和icon等信息
    3. System server将读取一些与Application运行相关的信息,如:获取和处理Application的notification请求等
    4. 最后apk所包含的内容不仅限于当前Application所使用,并且可以被其它的Application调用,提升系统资源的可复用性。

Android中,APK签名是一种用于验证应用程序的完整性和来源的安全机制。通过对APK文件进行签名,可以确保应用程序在安装和更新过程中没有被篡改或恶意修改。 Android支持多种应用签名方案,包括v1、v2、v3和v4方案。v1方案是基于JAR签名,是最早引入的签名方案。v2方案是在Android 7.0引入的APK签名方案,提供了更强的安全性和完整性保护。v3方案是在Android 9.0引入的APK签名方案,进一步增强了应用程序的安全性。v4方案是在Android 11.0引入的APK签名方案,提供了更多的功能和安全性。 要对APK进行签名,可以使用命令行工具或者使用Android开发工具包(SDK)提供的工具。一个常见的签名操作是使用Java命令行工具执行签名操作,具体命令如下: ``` java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk ``` 这个命令将使用指定的签名证书和私钥对输入的APK文件进行签名,并生成一个新的已签名APK文件。 通过对APK进行签名,应用程序将获得系统权限。具体的权限可以在AndroidManifest.xml文件中查看,该文件位于frameworks/base/core/res/目录下。如果将应用程序的签名预置到系统中,应用程序将具有更多的系统权限,而如果使用应用程序自身的签名,则只会具有普通权限。 总结起来,APK签名是一种用于验证应用程序完整性和来源的安全机制,在Android中支持多种签名方案。通过对APK进行签名,应用程序可以获得系统权限。 #### 引用[.reference_title] - *1* *3* [android apk 签名(平台和普通签名)](https://blog.csdn.net/topsecrethhh/article/details/103376745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android apk签名原理](https://blog.csdn.net/weixin_42600398/article/details/122843107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值