当前位置: 首页 > news >正文

【Android】Android签名解析

文章目录

  • 前言
  • 一、什么是JKS?
    • 生成JKS签名文件
      • android studio创建
      • 命令行创建
    • 配置签名
      • gradle文件配置签名
      • 命令行手动签名
  • 二、jarSigner签名
    • 简介
    • 签名
    • 验证签名是否成功
    • V1签名问题
  • 三、apkSigner签名
    • 简介
    • 签名
    • 验证签名是否成功
  • 四、适配API等级30
      • 1、先进行zipalign对齐
      • 2、使用apkSigner签名
  • 五、参考链接


前言

目前项目上需要给手机端apk签名,出于上架的需要,出现一些问题,顺手整理总结Android签名相关的知识。

在Android平台上,有两种主要的签名方案:V1方案和V2方案。V1方案是较早引入的,它通过给APK的各个部分分别签名,并将签名信息存储在META-INF目录中。V2方案则是Android 7.0(Nougat)中引入的,它在整个APK文件上进行签名,而不是单独对各个部分签名,这可以提供更快的验证速度,并且支持更多的优化。

在开始签名APK之前,开发者需要准备一个签名密钥。签名密钥通常包含在一个称为密钥库(keystore)的文件中,这个文件以 .keystore 或 .jks (Java密钥库)为扩展名。生成密钥库时,开发者需要指定密钥库的密码、密钥别名以及密钥的密码。

一、什么是JKS?

‌JKS签名‌(Java KeyStore签名)是一种在Android开发中常用的签名方式,主要用于对APK文件进行数字签名,以确保APK的完整性和安全性。JKS是Java KeyStore的缩写,是一种存储密钥和证书的二进制文件,常用于Java平台上对应用程序进行签名‌

生成JKS签名文件

android studio创建

在 Build >> generate Signed bundle or apk >> create new >> 根据引导创建即可

命令行创建

在Android系统中使用openssl工具从platform.pem生成platform.p12,并设置别名和密码,最后通过keytool将platform.p12导入为platform.jks,全程涉及密钥转换与安全管理。

  1. 生成platform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
  1. 生成platform.p12文件,并设置别名(eric)和密码(123456)
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name eric
  1. 生成platform.jks文件 (密码:123456)
keytool -importkeystore -deststorepass 123123 -destkeystore ./platform.jks -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 123456

配置签名

gradle文件配置签名

傻瓜式配置,但是明文显示不安全

        release {keyAlias '1234'keyPassword '1234'storeFile file("../app/doc/jks.jks")storePassword '1234'v1SigningEnabled truev2SigningEnabled trueprintln("sign file = " + storeFile)}

引用签名信息

        debug {minifyEnabled truesigningConfig signingConfigs.release}

命令行手动签名

推荐使用命令行签名,使用jarSigner签名工具或apkSigner签名工具来手动签名

二、jarSigner签名

简介

jarsigner 是 Java Development Kit (JDK) 提供的一个用于对 JAR 文件进行签名和验证的命令行工具。它主要通过使用密钥库(keystore)和别名(alias)来识别私钥。

签名

jarsigner -verbose -keystore my-release-key.jks -storepass [your-keystore-password] -keypass [your-key-password] -signedjar output.apk original.apk my-key-alias

命令详细参数介绍:

-verbose :显示详细信息。
-sigalg SHA1withRSA :指定签名算法为SHA1withRSA-digestalg SHA1 :指定摘要算法为SHA1。
-keystore my-release-key.keystore :指定密钥库文件路径。
-output.apk :签名后的apk
-original.apk :要签名的APK文件。
-my-key-alias :指定密钥库中的密钥别名。

验证签名是否成功

jarsigner -verify -verbose -certs ‘***.apk’

V1签名问题

安装报错:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package com.lion.lionlink]

jarsigner只能签名V1的包,导致android11以上的无法安装,推荐使用apkSigner签名。

三、apkSigner签名

简介

apkSigner 是 Android 开发中用于签名 APK 文件的工具,它属于 Android SDK build-tools 的一部分。自从 Android 7.0 (API 级别 24) 引入了 V2 签名方案后,apksigner 成为了官方推荐的签名工具,用以替换旧的 jarsigner 工具。apksigner 支持 V1、V2、V3 和 V4 签名方案,提供了更多的灵活性和安全性。

签名

apksigner sign --ks my-release-key.keystore --ks-key-alias my-key-alias --ks-pass pass:password --key-pass pass:password --out signed.apk my-application.apk

命令详细参数介绍:

--ks :指定密钥库文件。
--ks-key-alias :指定密钥库中的密钥别名。
--ks-pass :指定密钥库的密码。
--key-pass :指定密钥对的密码(与密钥库密码不同的情况)。
--out :指定输出的签名后的APK文件。
--my-application.apk :要签名的APK文件。

验证签名是否成功

-certs 参数会输出证书链的信息,这有助于开发者了解签名证书的相关细节,例如证书的发行者和有效期。开发者应确保这些信息与预期相符,以防止证书伪造或滥用。
验证结果打印签名的相关信息

apksigner verify --print-certs ‘******_V2.3.3.apk’
验证结果如下:

Signer #1 certificate DN: C=cn, ST=jiangsu,*****
Signer #1 certificate SHA-256 digest: fc6af0873dd433c830e0*****
Signer #1 certificate SHA-1 digest: b85fdb5a0ffb5cc*****
Signer #1 certificate MD5 digest: a521361d2a*****

四、适配API等级30

通过上述的打包、重签名的过程中,如果API Level >= 30的情况下,使用adb命令来安装apk包,就会出现如下报错:
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]

官网资料建议
在这里插入图片描述

1、先进行zipalign对齐

cd /Users/xxx_ios/Library/Android/sdk/build-tools/33.0.0// 加固apk文件  会生成一个新的apk文件 的路径
./zipalign -p -f -v 4 /原apk文件路径/20240221175241.apk  /Users/新apk文件路径/.apk

1 ZIPalign工具的作用和重要性
ZIPalign是一个专门用于对APK文件进行优化的工具,它确保所有的非代码文件(如图片、音频文件等资源文件)都按照对齐值进行对齐。这个对齐值通常是4字节(4字节对齐)。ZIPalign的使用在Android应用发布流程中非常关键,因为它不仅优化了应用的性能,还减少了应用占用的内存大小。

对齐操作的实质是修改APK文件中的资源文件偏移量,以便它们从文件的4字节边界开始。这一改动使得Android系统在访问这些文件时更加高效,因为它可以直接从内存地址读取这些数据,而无需进行额外的字节拷贝操作。这种优化对内存使用和运行性能有显著的提升。

2 ZIPalign与APK性能优化的关系
应用性能优化是一个涉及多个方面的复杂过程,而ZIPalign工具是其中不可或缺的一个环节。正确使用ZIPalign可以在应用运行时减少内存的使用,提高应用的启动速度和运行效率。对齐后的APK文件在安装时会被Android系统自动识别,并利用优化过的文件结构进行加载。

ZIPalign的使用有助于减少设备的CPU负载,因为文件访问变得更为高效。此外,正确的对齐还有助于降低电量消耗,因为不需要频繁地执行读写操作。因此,使用ZIPalign不仅对用户体验有直接的正面影响,也对设备的能耗管理有间接的益处。

2、使用apkSigner签名

五、参考链接

  • Android系统中jks文件的生成方法
  • keyStore、jks签名证书相互转换
  • Android 签名、打包、上架
  • Android APK签名及修改工具实战指南
http://www.xdnf.cn/news/238717.html

相关文章:

  • TEN:开启实时语音交互的下一代AI Agent引擎
  • 54.[前端开发-前端工程化]Day01-Node-Node安装-前端模块化
  • 多通道协调加载试验机
  • SpringBoot+Redis全局唯一ID生成器
  • Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析
  • 【数据链路层深度解析】从帧结构到协议实现
  • git 怎样把本地仓库推送到新建的远程仓库
  • 详细解释C++ 泛型模板中的完美转发(Perfect Forwarding)
  • 【自定义控件实现最大高度和最大宽度实现】
  • 2025年天梯题解(L1-8 + L2)
  • 普通IT的股票交易成长史--20250430午
  • 湖北理元理律师事务所:从法律视角看债务优化的合规实践
  • 【Android】36原生Settings新框架PreferenceFragment
  • 生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向
  • 文章记单词 | 第51篇(六级)
  • 代码随想录算法训练营第三十天(补)
  • 【mysql】执行过程,背诵版
  • 2025平航杯—团队赛
  • 企业的呼入语音智能体是什么样子?
  • 启动Hadoop集群及集群效果
  • 企业数字化转型新动向日渐明鲜,当以“AI为中心”而驱动
  • 分治算法求序列中第K小数
  • RAII 示例
  • 2025-03 机器人等级考试四级理论真题 4级
  • Dify添加ollama模型失败:NewConnectionError: Failed to establish a new connection
  • MCP与开源社区的共赢之道:携手推动技术创新
  • GRE隧道
  • Git Stash 详解
  • windows系统常用快捷键(CMD常用命令,DOS常用命令)
  • C++类和对象(中)