这几天研究用apktool解码,打包,签名,那是相当的闹心,因为之前没有接粗过,各种碰壁,总算有点成果,分享一下:
首先apktool工具的下载,为了保证工具是最新版本,应该去https://bitbucket.org/iBotPeaches/apktool/downloads/下载
将下载的apktool_2.3.1.jar文件重命名为apktool.jar;
新建文本文件,将下面的脚本复制到文本并保存,然后重命名为apktool.bat;
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0\apktool.jar" %*
有了这两个文件,就可以对apk操作了,把你的应用比方说a.apk复制到当前目录:
第一步解码:
apktool d -f -s a.apk
d:decode解码
s:no src 阻止分割dex
f:force 强制(可以没有,有的话如果存在a文件夹会直接覆盖,否则会询问你)
不方便截图,大家脑补一下吧
第二步打包:
apktool b -f a -o b.apk
b:build构建
f:force强制,可覆盖
o:out输出
a:不是命令,是文件夹的名称
b.apk:构建出来的apk名称
为什么要用-o呢?因为不指定名称的话,apk会默认在文件夹a的dist里面,指定了以后就直接在apktool目录下了
第三步签名:
jarsigner -verbose -keystore abc.keystore -signedjar a_signed.apk a.apk abc
abc.keystore是你的keystore名称
a_signed.apk:签名后的apk名称
a.apk:待签名的apk名称
abc:是你keystore的别名,别名是什么?反正你的keystore一共就俩东西出来密码就是这个了
你也可以这样写:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -storepass 123456 -keypass 123456 -keystore abc.keystore -signedjar a_signed.apk a.apk abc
这个方法的好处是直接输入keystore的密码了,不用再次输入
1234156:密码
abc:别名
实际上很多混淆过得apk根本没办法重新打包,没混淆的倒是没有问题