使用jarsigner对APK重签名,提示:jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 41278 but got 42575 bytes)

网上说解决办法是:把要重签名的apk后缀改成zip,打开后删除里面的META-INF目录,然后重新改成apk后缀

我采用的上面的方法,:unzip解压apk-->删除META-INF-->zip压缩成新的apk-->签名

                     新生成的apk,此方法apk虽然可以安装成功,但是不能使用,会崩溃。

所以以我自己的经验,不建议用上面的方法

我建议用这种方式:把要重签名的apk用apktool.jar反编译,打开后删除里面的META-INF目录,然后使用apktool重编译成改成apk,这样保险点

我的流程是这样的:(网上有很多apktool.jar的下载链接,就不详些了,比如https://ibotpeaches.github.io/Apktool/install/)

(1)java -jar apktool.jar d old_name.apk    (说明:反编译给定的old_name.apk)

(2) rm old_name.apk (说明:删除旧的apk)

(2) rm -rf old_name/original/META-INF  (说明:删除原有的签名相关的文件)

(3) java -jar apktool.jar b old_name (说明:重编译apk)

(4) mv old_name/dist/old_name.apk  target_name.apk (说明:重编译生成的apk就是old_name/dist/old_name.apk)

(5)jarsigner -verbose -digestalg SHA1 -sigalg SHA1withRSA -keystore aw.key -signedjar signed_target_name.apk  target_name.apk allis_aw -storepass secret

(说明:用java自带的命令jarsigner签名,签名算法可以根据自己的情况选择,jarsigner默认使用的是SHA1-256,如果需要指定签名算法为SHA1,需要加参数-digestalg SHA1 -sigalg SHA1withRSA,否则将会出现安装失败的问题,签名以后文件中显示的是SHA1-Digest,-keystore跟你的签名证书key存储文件,-signedjar new.apk old.apk allis_aw是你的key文件的简称  -storepass接key文件的密码,参考https://blog.csdn.net/chen_xi_hao/article/details/73801631)

(6)jarsigner -certs -verify signed_target_name.apk  (说明:验证签名)

(7)$zipalign -v 4 signed_target_name.apk  zipalign_signed_target_name.apk   (说明:压缩优化,参考https://blog.csdn.net/fulushan/article/details/80841649)

最后这个zipalign_signed_target_name.apk  就是我们需要的apk ,确保签名算法满足要求,安装后可以正常使用

 

  上面的方法对于改动apk是没毛病的,比如,我们打包了一个公版的包,所有的配置的都是开发默认设置的,这时候我们有个渠道包,比如小米渠道,只需要改下里面的图标,如果我们完全再重新打包小米的渠道包,如果apk多呢,简直就是浪费时间,这时我们可以用上面的方法,反编译apk,删掉META-INF,替换掉默认图标为小米的图标,再重编译apk,再签名就可以用了,这个过程脚本不要一分钟就搞定了,大概20几秒。

  如果我们不需要改apk里的东西呢,只是想重新签名一下,比如我们会有这样的场景需要验证,apk只能是我们自己的签名才能安装,如果其他人换用其他签名就会安装失败并报错签名不可用。这个时候我们只需要重新签名apk就可以了,如果还是采用反编译,删META-INF,重编译,再签名,一个apk,我们可以忍受,多个apk呢,就有点吃力了。这个时候,我们可以采用另一种方式签名:就是把key转化成pk8和pem文件,然后一条命令就可以完成重签名了,参考https://www.cnblogs.com/zndxall/p/9857767.html

另外转一篇如何判断两个apk的签名是否一致的博客:https://blog.csdn.net/qq_31490071/article/details/72842407

重签名提示:无法对 jar 进行签名: java.util.zip.ZipException的更多相关文章

  1. Java.util.zip adding a new file overwrites entire jar?(转)

    ZIP and TAR fomats (and the old AR format) allow file append without a full rewrite. However: The Ja ...

  2. [工具向]__androidstudio签名打包apk及配置自动签名

    前言 好几天了,没怎么更新了,最近迷上了抓妖,有些懈怠了,这两天在看android的一些东西,java暂时就先放了放,昨天终于是完成了一个小阶段的任务,今天来对这两天的东西进行一下总结. *** 因为 ...

  3. C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”

    调用外部dll时,出现如下问题 C# DllImport“调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配.请检查 PInvoke 签名的调用约定和参数与非托管的目标 ...

  4. 苹果企业版签名分发相关问题,蒲公英签名,fir.im分发,安装ipa设置信任

    苹果企业版签名分发相关问题,蒲公英签名,fir.im分发,安装ipa设置信任蒲公英 - 高效安全的内测应用发布.管理平台https://www.pgyer.com/app/signature分发版 2 ...

  5. 托管调试助手 "PInvokeStackImbalance":的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管

    在C#中一定要检查引用时的数据类型 WinAPI 的数据类型 默认是32位的,但是引用时外部的是 Long类型默认是64位的.所以引用时需要将 long 改为 int 型. 参照 http://blo ...

  6. 对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。

    C#引入外部非托管类库时,有时候会出现“对PInvoke函数调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配”的报错. 通常在DllImport标签内加入属性Call ...

  7. Windows 签名伪造工具的使用,Python,签名

    #!/usr/bin/env python3 # LICENSE: BSD-3 # Copyright: Josh Pitts @midnite_runr import sys import stru ...

  8. 如何用jar命令对java工程进行打包

    如何用jar命令对java工程进行打包 有时候为了更方便快捷的部署和执行Java程序,要把java应用程序打包成一个jar包.而这个基础的操作有时候也很麻烦,为了方便java程序员们能够方便的打包ja ...

  9. Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

    方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三方jar包的Java项目,故需要自定义配置文件MANIFEST.MF,在该项目 ...

随机推荐

  1. golang - interface的作用

    多态.struct 可以赋值给 interface.interface 可以转换成子接口,或者 struct. 请看go中的一段的源代码: listener, _ := net.Listen(&quo ...

  2. 别致的语言GO(GO语言初涉)

    最近由于各种原因(好吧,其实是犯懒)已经许久没有再写新的博文了!最近正好在学习一门新的语言,所以正好记录一下自己的学习成果!最近利用每天晚上下班回来后的几小时,学习了Google开发的Go语言,算是对 ...

  3. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  4. 关于SQL SERVER中的FLOAT转换为VARCHAR

    关于SQL SERVER中的FLOAT转换为VARCHAR 一个FLOAT型的字段,要转换为VARCHAR,可是小数点后面的都自动被删去了...后查得可以通过如下转换获得: SELECT CAST(C ...

  5. 记一次 windows server 2012R2 上安装 MSSQL2005 及网站发布

    背景: 原因是因为没有购买新的数据库授权.由于之前服务器是windows 2003 由于后绪网站的版本可能会升到.net4.5 据说 2003上安装不起 所有由另一同事到客户安装一个window se ...

  6. 联想y720 淋了雨,字体变得模糊了

    显卡驱动没有问题 重新校准显示器问题解决 事实上,可能是某些软件 扰乱了系统字体,请安装上述来重新调整显示器的字体清晰度

  7. React中Props 和 State用法

    React中Props 和 State用法 1.本质 一句话概括,props 是组件对外的接口,state 是组件对内的接口.组件内可以引用其他组件,组件之间的引用形成了一个树状结构(组件树),如果下 ...

  8. TIC Read Status此类网络活动提醒隐藏

    这个方法会使得NSLog输出失效,printf正常工作 不推荐使用,应该是很多操作均被关闭,需要详细了解该参数意义 OS_ACTIVITY_MODE = disable

  9. 函数调用堆栈及活动记录 堆栈溢出 stack overflow

    小结: 1.当被调函数返回主调函数时,被调函数的 活动记录-activation record / 堆栈帧-stack frame 被 弹出-popping 程序执行栈-program executi ...

  10. [knowledge][ETA] Encrypted Traffic Analytics

    思科ETA主页 https://www.cisco.com/c/en/us/solutions/enterprise-networks/enterprise-network-security/eta. ...