Android apk重新打包遇到的坑

背景

公司做好的apk,今天测出了问题。但是今天是周六,个人电脑上没代码,要自己想办法改apk的内容后重新打包了。好在这个apk没有加固,而且工程基本都是H5代码,可以直接改压缩文件后重新打包就可以了。

Android apk反编译和重新打包 看我写的这个博客
https://blog.csdn.net/weixin_36001685/article/details/100986829

若干坑

使用windows电脑将后缀.apk改成.rar后直接使用winRAR打开,不解压缩成文件夹。然后保存。然后再把后缀改回去。安装,报错这个apk没有签名证书。
下载了apktool,里面有一个工具Auto-Sign,各种百度它的用法,最终还是没有成功签名。
以下操作都是mac下进行的,windows下可能有些许区别。

有人说用Android Studio自带的apksigner和jarsigner,先声明一下,我最终用的是jarsigner。

它们目录是/Users/用户名/Library/Android/sdk/build-tools/版本号/

###我首先尝试apksigner,结果执行报错,没有这个命令,即使在它的目录下执行都不行,不知道为什么,就放弃了。
###然后尝试jarsigner,

报错jarsigner error: java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0

解决:参考https://stackoverflow.com/questions/46508081/jarsigner-error-java-time-datetimeexception-invalid-value-for-monthofyear-val
意思是说jarsigner版本跟电脑jdk版本不一致。于是Java -version,看到电脑是9的jdk,于是百度怎么改成1.8的jdk,最终在这里看到了答案:
https://www.cnblogs.com/maxinliang/p/4389971.html
我的做法是:
1.下载java1.8,安装。安装后的目录是/Library/Java/JavaVirtualMachines/jdk-版本号.jdk
2.在终端输入open ~/.bash_profile
3.在打开的.bash_profile里加入:
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
export JAVA_9_HOME=//Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
export JAVA_HOME=KaTeX parse error: Double subscript at position 7: JAVA_9_̲HOME alias jdk8…JAVA_8_HOME’
alias jdk9=‘export JAVA_HOME=$JAVA_9_HOME’
4.在前一个终端输入
source ~/.bash_profile
5.然后测试是否设置成功了:输入jdk8回车,输入javac回车看是不是1.8版本了。
在1.8版本jdk下执行jarsigner就不会报这个错了。

jarsigner: 无法打开 jar 文件:

命令错了,可能是打包前和打包后的名字反了。

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

bytes) bytes)
解决办法是:签名之前的rar压缩文件,打开后删除里面的META-INF目录,然后重新改成apk后缀

最后写上终极命令

jarsigner -verbose -keystore keystore.keystore -storepass 123456 -signedjar testsigned.apk -digestalg SHA1 -sigalg MD5withRSA test.apk alias

keystore.keystore 是keystore文件,可以使用AndroidStudio生成或命令生成,我是放在终端窗口同级目录下,所以不需要全路径。
-storepass 123456 密码
testsigned.apk 签名后的文件名
test.apk 待签名的文件名
alias 别名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值