@[TOC](Android 运用渠道加固之后操作(apk重签名)「zipalign」「apksigner」「jarsigner」)
前语
说一个恐怖的工作:==现在的Android签名计划现已有v1,v2,v3,v4了== ,v3支撑多个证书,v4为增量签名。具体概况请看 官方文档 。咱们现在仍是以v1,v2为主。
当然,这是题外话,当前这篇文章的主题是:Android 渠道加固之后的重签名姿态。咱们在(腾讯加固/360加固/爱加密)等等渠道上面加固之后的apk,下载下来的时分,都需求咱们进行重签名的操作。而重签名呢,又有两种办法:
- Java:==jarsigner== java自带的jar签名,也便是咱们Android打包的v1签名,签名计划只能v1
- Android:==apksigner== Android特有的签名,也便是打包的v2签名,支撑多种签名计划(v1~v4)。
本文章将介绍从各大加固渠道下载下来的apk包,进行「对齐(zipalign)」、「重签名(jarsigner与apksigner)」的操作详解。
运转环境
运转环境 | 版别 |
---|---|
操作系统 | macOS 13.0.1 (Ventura) |
AndroidStudio | 2021.3.1 Patch 1 (Dolphin) |
JDK | 1.8.0_322 |
Android SDK | 27.0.3 |
本文介绍的三种办法,都需求装备环境变量。不然需求翻开终端,定位到相对应的方位:
-
zipalign工具方位:SDK途径/tools/zipalign
例如:/Users/leomark/Library/Android/sdk/tools/zipalign
-
jarsigner工具方位:JDK途径/Contents/Home/bin/jarsigner
例如:/Users/leomark/Library/Java/JavaVirtualMachines/corretto-1.8.0_322/Contents/Home/bin/jarsigner
-
apksigner工具方位:SDK途径/build-tools/「版别号」/apksigner 「版别号需 >= ==24.0.3==」
例如:/Users/leomark/Library/Android/sdk/build-tools/27.0.3/apksigner
装备环境变量请查看之前写的文章 Flutter 开发-安装与环境装备-装备环境变量失效问题 在里面新增三个个环境变量(现已新增过的可疏忽,少了哪个添加哪个即可):
export PATH="「SDK途径」/tools"
export PATH="「JDK途径」/Contents/Home/bin"
export PATH="「SDK途径」/build-tools/「版别号」" 「版别号需 >= 24.0.3」
例如:
export PATH="/Users/leomark/Library/Android/sdk/tools"
export PATH="/Users/leomark/Library/Java/JavaVirtualMachines/corretto-1.8.0_322/Contents/Home/bin"
export PATH="/Users/leomark/Library/Android/sdk/build-tools/27.0.3"
需求留意的是,由于 ==apksigner== 是Google在 Android 7.0 Nougat 推出的,所以咱们的版别号的挑选需求 >= ==24.0.3== ,不然只能挑选 ==jarsigner== 办法打v1包。
对齐(zipalign)
咱们从渠道下载下来的加固apk包,官方文档有具体介绍说,具体看这里 《官方文档 – zipalign》咱们只是看起来有一点陌生,但是这个其实便是咱们项目在打包时分的 ==zipAlignEnabled true== 的这个选项,只不过咱们在加固完之后,这个 ==对齐「zipalign」== 就被弄没了,咱们需求从头 ==对齐「zipalign」==。项目app目录下build.gradle文件:
buildTypes {
release {
minifyEnabled true//混杂
buildConfigField "boolean", "LOG_DEBUG", "false" //不显现log
zipAlignEnabled true //Zipalign优化
shrinkResources true // 移除无用的resource文件
signingConfig signingConfigs.release
multiDexKeepFile file ('multidex-config.txt')
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true//混杂
buildConfigField "boolean", "LOG_DEBUG", "false" //不显现log
zipAlignEnabled true //Zipalign优化
shrinkResources true // 移除无用的resource文件
signingConfig signingConfigs.debug
multiDexKeepFile file ('multidex-config.txt')
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
需求留意的是,==zipalign的运用关于jarsigner和apksigner有一个时间前后规则:==
- 假如您运用的是 apksigner,则有必要在为 APK 文件签名之前运用 zipalign。假如您在运用 apksigner 为APK 签名之后对 APK 做出了进一步更改,签名便会失效。
- 假如您运用的是 jarsigner,则有必要在为 APK 文件签名之后运用 zipalign。
当装备好环境变量之后,就能够运用终端运用相对应的对齐句子了,下面是查看apk是否对齐的办法,翻开终端输入:
zipalign -c -v 4 apk途径
例如:
zipalign -c -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk
成果如下:
接下来便是运用终端,实现apk对齐操作,在翻开的终端输入:
zipalign -v 4 「需求对齐操作的apk地址」 「对齐之后生成的地址」
例如:
zipalign -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk
成果如下:
呈现 “Verification succcessful” 为对齐成功。咱们能够重复上诉查看对齐操作看看,成果如下:
留意:这里的检测句子结尾的apk姓名得修改为 ==zipaligned.apk==,原因是咱们对齐的时分,生成了新的命名为 ==zipaligned.apk== 的新文件。当然这里的姓名能够自己随意界说。
重签名 apksigner (引荐办法)
重签名 「apksigner」 和 「zipalign」对齐办法相同,咱们需求用到的事查看句子和生成句子。 需求留意的是:
- 咱们选用「apksigner」的办法重签名,需求先对齐「zipalign」 apk包。==不能重签名之后再对齐「zipalign」apk包。== 虽然重签名之后能够运转对齐「zipalign」终端句子,但是对齐之后,该apk包的签名将失效。
所以咱们假如选用 「apksigner」的办法进行重签名,有必要先对齐「zipalign」apk包,再进行重签名操作。 下面是查看是否签名的终端句子,在翻开的终端输入:
apksigner verify -v 查看的apk途径
例如:
apksigner verify -v /Volumes/Data/Android_jiagu/teacher/zipaligned.apk
成果如下:
接下来持续在终端输入「apksigner」重签名句子(当然,也能够不履行查看句子,对齐「zipalign」之后直接履行重签名句子):
apksigner sign -verbose --ks 「jks文件途径」 --v1-signing-enabled (「true/false」v1打包敞开/封闭) --v2-signing-enabled (「true/false」v2打包敞开/封闭) -ks-key-alias (jks别号 key-alias) --ks-pass pass: (jks暗码,key store password) --key-pass pass:(key 暗码,key password) --out 「生成的apk途径,重签名后的」 「对齐之后的apk途径」
例如:
apksigner sign -verbose --ks /Volumes/Data/Android_jiagu/teacher/zhty.jks --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias key --ks-pass pass:123456 --key-pass pass:123456 --out /Volumes/Data/Android_jiagu/teacher/signed.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk
终端运转成果如下:呈现 Signed 则为重签名成功。
咱们再来查看一下,终端输入查看句子,成果如下:
呈现框起来的那两行,就阐明,咱们现已重签名「apksigner」成功了,咱们能够拿apk包去各大运用市场上架操作了。
重签名 jarsigner (v1打包)
重签名「jarsigner」和 「adksigner」相同,也是只需求查看和重签名两个办法。 需求留意的是:
- 重签名「jarsigner」是签名之后才干对齐「zipalign」apk包。==假如对齐「zipalign」之后再进行重签名「jarsigner」,那么对齐「zipalign」将会失效。==
所以咱们需求先重签名「jarsigner」,再进行对齐「zipalign」操作,下面咱们翻开终端输入:
jarsigner -verify 「查看的apk途径」
例如:
jarsigner -verify /Volumes/Data/Android_jiagu/teacher/jiagu.apk
成果如下:
接下来持续在终端输入「jarsigner」重签名句子(当然,也能够不履行查看句子,直接履行重签名句子):
jarsigner -verbose -keystore 「apk签名文件途径」 -storepass 「签名暗码」 -signedjar 「需求重签名apk途径」 「加固的apk途径」 「签名别号 key-alias」
例如:
jarsigner -verbose -keystore /Volumes/Data/Android_jiagu/teacher/zhty.jks -storepass 123456 -signedjar /Volumes/Data/Android_jiagu/teacher/signed.apk /Volumes/Data/Android_jiagu/teacher/jiagu.apk key
成果如下:
签名之后咱们再查看一下:
查看完之后,咱们就能够重复上面讲的对齐「zipalign」操作了,再对齐之后,咱们就能够拿到对齐「zipalign」的apk包去各大运用市场上架了。
具体运用
重签名「jarsigner」与「apksigner」的操作次序为:
- jarsigner: ==查看apk是否签名== ===> ==「jarsigner」重签名== ===> ==是否重签名成功== ===> ==对齐「zipalign」== ===> ==查看是否对齐==
- apksigner: ==查看是否对齐== ===> ==对齐「zipalign」== ===> ==查看是否对齐== ===> ==查看apk是否签名== ===> ==「apksigner」重签名== ===> ==是否重签名成功==
具体操作句子请参考前面每一个办法的具体介绍。引荐运用 ==「apksigner」== 进行重签名,直接打v1、v2 的签名apk包。
对齐「zipalign」呈现 “Output file ‘……apk’ exists”
当咱们多次履行对齐句子之后,假如每一次都是用同一个姓名,输入对齐句子,终端就会爆这个过错,如下图所示:
终端在提示咱们,文件现已存在了。咱们输入的这句子不支撑覆盖。查阅Android官网 对齐 ==「zipalign」== 的界说,文章结尾找到了解决计划:
官网列表能够看出,咱们在终端输入的时分, 加一个 ==「 -f 」== 就能够覆盖输出文件。所以,咱们现在有两种解决计划:
- 咱们在每一次加固的时分,清空当前操作文件夹的一切apk文件,然后再履行句子。
- 在原来的句子基础上,添加一个 ==「 -f 」== 终端句子:
-
zipalign -f -v 4 「需求对齐操作的apk地址」 「对齐之后生成的地址」 例如: zipalign -f -v 4 /Volumes/Data/Android_jiagu/teacher/jiagu.apk /Volumes/Data/Android_jiagu/teacher/zipaligned.apk
-
总结
以上便是本文所介绍的从加固渠道下载下来之后,重签名的教程。仍是那句话,引荐运用 ==「apksigner」== 进行重签名,直接打v1、v2 的签名apk包。
有不对或者过错的当地,欢迎指出!
相关学习资料:
- Android官方文档 – 运用程序签名
- Android官方文档 – zipalign
- Android官方文档 – apksigner
- Android之通过 apksigner 对 apk 进行 手动签名
- Android APK 加固从头签名
- Flutter 开发-安装与环境装备-装备环境变量失效问题