双重签名.apk // SHA1&其他问题

时间:2017-07-19 06:36:41

标签: java android algorithm apk jarsigner

我目前在双重签名.apk时遇到了一些问题。 正常的工作流程总是:

zip -d FILE.apk META-INF/\*
jarsigner -verbose -keystore EXTERNAL.keystore FILE.apk EXTERNAL
jarsigner -verbose -keystore INTERNAL FILE.apk INTERNAL
zipalign -v 4 FILE.apk FILE_ALIGNED.apk

使用此原始方法时,我收到Google Play商店的错误:

您上传了一个带有无效签名的APK(了解有关签名的详情)。来自apksigner的错误:ERROR(Jar签名者INTERNAL.RSA):JAR签名META-INF / INTERNAL.RSA使用摘要算法2.16.840.1.101.3.4.2.1和签名算法1.2.840.113549.1.1.1,API不支持级别[[14,17]]

由于我只是为" INTERNAL.RSA"我尝试使用:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore INTERNAL FILE.apk INTERNAL

导致另一个错误:

您上传了一个带有无效签名的APK(了解有关签名的详情)。来自apksigner的错误:错误(Jar签名者EXTERNAL.DSA):META-INF / EXTERNAL.SF中的资产/ www / assets / fonts / FONT.ttf没有摘要

这只是错误的一小部分,因为它列出了应用程序的每个资产都有相同的错误。我感谢每一个关于如何解决这个问题的帮助或提示。

干杯, 的Marius

1 个答案:

答案 0 :(得分:1)

您可以尝试从jarsigner切换到apksignerhttps://developer.android.com/studio/command-line/apksigner.html)。原来的四个命令切换到:

zipalign -v -p 4 FILE.apk FILE_ALIGNED.apk
apksigner sign --ks EXTERNAL.keystore --next-signer --ks INTERNAL FILE_ALIGNED.apk

OP中的第一个错误是由于RSA与SHA-256 APK签名(现代jarsigner中的默认值)在早于API级别18(Jelly Bean MR2)和APK的AndroidManifest.xml声明的平台上不受支持(通过android:minSdkVersion),APK支持在API级别为14及更高级别的平台上运行。

P上。 S.您可以通过运行

来近似Play的APK签名检查行为
apksigner verify some.apk