一、反编译
1.将apktool_2.3.4.jar与要反编译的apk放在同一文件夹内
(apktool官网下载地址:iBotPeaches / Apktool / Downloads — Bitbuckethttps://bitbucket.org/iBotPeaches/apktool/downloads/
2.启动cmd并将目录切换至当前目录中
3.使用反编译命令:java -jar apktool_2.3.4.jar(即你的apktool的名称) d -f zdt.apk(即你的apk名称) -o source(存放反编译后代码的文件夹名称,没有会在当前目录自动生成)
红框部分虽不影响操作,但是最好将其目录建立出来
如果报出以上错误,请更换2.4.1及以上版本的apktool,并使用下面的命令重新反编译:
java -jar apktool_2.3.4.jar d -f com.ys.swty.apk –only-main-classes -o source
4.根据自身需求修改source/smali中的代码(如何阅读smali中的代码及修改自行百度)
二、生成未签名包
1.重新打包生成未签名的包,使用命令:java -jar apktool_2.3.4.jar b source(存放反编译代码的文件名称) -o zdt_unsign.apk(打包生成apk的名称)
上面为经典报错,我是被它gank了一波,问题分享及解决方案:
这些error信息告诉我们/res/values/public.xml文件中第“数字”行出错,里面指定的对象在res目录下不存在。
这是精简或图片资源引用错误引起的,比如某张图片在其他dpi里定义了,在当前保留的dpi里却用不到,当我们把它删除后,并没有删除它在public.xml文件中的定义,程序回编译的时候按照public.xml去找它却已经找不到了,于是就报错了。
解决的方法就是打开public.xml文件,删除相应的行即可
删除后重新允许打包命令,运行结果如下:
zdt_unsign.apk成功打包生成了
三、给未签名包签名
1.生成签名证书,使用命令:keytool -genkeypair -alias zdtkeyalias(签名证书别名) -keyalg RSA -validity 100 -keystore zdtsigned.jks(签名整数文件名称)
部分命令参数如下截图:
命令执行结果如下:
红框部分必须要有,后面给之前生成的未签名包签名时会用到
2. 给zdt_unsign.apk签名,使用命令:jarsigner -verbose -keystore zdtsigned.jks(签名证书文件名称) -signedjar zdt_signed.apk(要生成的签名包名称) zdt_unsign.apk(待签名的包名称) zdtkeyalias(签名证书的别名,之前生成签名证书时提到的)
得到如上结果,即说明你已成功反编译目标apk、修改其代码、并打包签名生成了新的可安装的apk文件了!