当前位置: 首页 > 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签名及修改工具实战指南

相关文章:

  • javascript 深拷贝和浅拷贝的区别及具体实现方案
  • 双指针(4)——盛水最多的容器
  • Vcpkg C++库管理工具安装
  • Depth Anything V2:深度万象 V2
  • 前端js学算法-实践
  • 可编辑25页PPT | 企业数字底座:数据中台构建路径、方法和实践
  • Vue3源码学习3-结合vitetest来实现mini-vue
  • Java ResourceBundle 资源绑定详解
  • linux find命令妙用
  • Kettle下载安装教程
  • Set系列之HashSet源码分析:原理剖析与实战对比
  • Ubuntu 24.04 终端美化
  • 强化学习之基于无模型的算法之基于值函数的深度强化学习算法
  • 望获实时Linux系统荣获人形机器人技术突破奖
  • 得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践
  • 多通道经颅电刺激器的主流厂家介绍
  • 柯希霍夫积分法偏移成像中数据分布不均匀的处理方法
  • 【题解】Codeforces Round 1019 (Div. 2) B.Binary Typewriter ~ E.Keep the Sum
  • 【赵渝强老师】使用TiDB的审计日志
  • Learning vtkjs之ImageStreamline
  • 五一期间全国高速日均流量6200万辆,同比增长8.1%
  • 美乌矿产协议签署被曝“临门一脚”时生变,美方提附加条件
  • 深交所修订创业板指数编制方案,引入ESG负面剔除机制
  • 神舟十九号航天员乘组平安抵京
  • 俄伏尔加格勒机场正式更名为斯大林格勒机场
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%