ShakaApktool前身算的上是RsApktool,也可以说是一个全新的项目.两者在理念上都是增强Apktool工具.包含了apktool_2.0.2.jar、apktool_2.0.3.jar、中文版ShakaApktool.jar、和签名工具signapk.jar等RsApktool是基于未发布的Apktool1.5.3分支做的增强,并在其代码上做的修改.只发布过一个版本,并未开源.
ShakaApktool在2013-12-25号初始化项目,使用AspectJ切面编程方式对原Apktool增强.而且他不再只顾埋头苦干自己的活儿,作为Apktool的增强的同时,也会向原库中提交一些代码.
ShakaApktool定位在保护和突破保护的对立中.
ShakaApktool 使用方法:
-advance,--advanced 查看更多信息.
-lng,--language <Locale> 显示语言, e.g. zh-CN, zh-TW
//ShakaApktool特有功能,如果需要英文输入直接修改apktool.bat 内 -Duser.language=en 中文即zh
-version,--version 查看版本信息
编译指令****************************************
d[ecode] [options] <file_apk>
//d 反编译参数,一般命令主要是apktool d file.apk 以下参数为d 后面可选参数
--api <API> 将按照API级别生成文件信息, 例如.14是ICS.
-b,--no-debug-info 不输出debug信息 (.local, .param, .line, etc.)
-d,--debug 反编译调试模式. 查看更多信息.
--debug-line-prefix <prefix> 反编译调试模式下, 给Smali添加行前缀 默认是 "a=0;// ".
-k,--keep-broken-res 当出现错误或者一些resources被放弃时使用,例如."Invalid config flags detected. Dropping resources", 即使在有错误的情况下,你还是想要强行反编译. 你之后必须手动修复相关错误才能进行编译.
-m,--match-original 保持尽可能的接近原始文件.防止重新生成.
-df,--default-framework 使用默然的框架资源文件
//ShakaApktool独有功能,主要作用删除$HOME/apktool/framework/1.apk然后释放新的1.apk(主要解决apktool内android-framework.jar升级后本地1.apk版本太低导致反编译失败问题)
-f,--force 强制删除目标文件夹
//这个应该用的比较多,在使用apktool d file.apk时候提示你目标文件夹已存在,加-f就会直接删除目标文件夹
-fui,--fuck_unkown_id 反编译遇到未知资源id继续执行
//ShakaApktool独有功能,主要是反编译遇到一些未知的id直接跳过
-ir,--ignore_res_decode_error 忽略资源反编译的错误
//ShakaApktool独有功能,主要是忽略资源反编译的错误
-mc,--more-recognizable-characters 显示更多的可识别字符
//ShakaApktool独有功能,显示更多的可识别字符,比如中文不在以\uxxxx编码显示,而是直接显示中文,让smali更容易读
-n9,--no-9png 不解析.9格式的资源
//ShakaApktool独有功能,在编译时直接不解析.9格式的文件
-o,--output <dir> 输出文件夹名字. 默认是 apk.out
//输出文件夹名,例如:apktool d -f file.apk -o out
-p,--frame-path <dir> 使用指定目录下的框架文件
//使用指定目录下的框架文件,例如:apktool d -f -p foo/bar file.apk -o out
//这里的-p foo/bar按照安装框架那一步来执行
-r,--no-res 不反编译resources.arsc
//不反编译resources.arsc,只反编译classes.dex
-s,--no-src 不反编译classes.dex
//不反编译classes.dex,只反编译resources.arsc
-t,--frame-tag <tag> 使用指定名称的框架文件
//使用指定名称的框架文件,例如:apktool d -f -t htc file.apk -o out
//这里的-t htc按照安装框架那一步来执行
-xn,--xml_attribute_name_correct xml attribute name correct. May be has problem, not recommended.
//ShakaApktool独有功能,xml 属性名实际是通过id来查找的,但是baxml中保留了一份显示的属性名。xml 属性名实际是通过id来查找的,但是baxml中保留了一份显示的属性名,已经测试mobileqq,qq浏览器可以正常使用
****************************************回编译指令****************************************
b[uild] [options] <app_path>
-a,--aapt <loc> 从指定路径加载aapt
//从指定路径加载aapt,例如:apktool b -a $HOME/sdk/build-tools/23.0.1/aapt out -o new.apk
-c,--copy-original 复制原始AndroidManifest.xml和META-INF文件.可以查看项目更多信息
-d,--debug 调试模式编译. 检查项目的更多信息
-f,--force-all 跳过已编译检查,强制编译所有文件
//覆盖已经存在的文件,强制编译resources.arsc 和 classes.dex
-o,--output <dir> 输出apk路径. 默认是 dist/name.apk
//输出apk路径,默认在dist/xxx.apk 例如:apktool b out -o new.apk(new.apk路径在命令执行的目录)
-p,--frame-path <dir> 使用指定目录下的框架文件
//使用指定目录下的框架文件,例如:apktool b -p foo/bar out
****************************************其他说明****************************************
-q 和 -v 命令
//-q 编译时不输出任何信息,直接静默模式编译,例如:apktool -q d或apktool -q b
//-v 编译时输出更多详细信息,例如:apktool -v d或apktool -v b
也可以直接不借助apktool[apktool.bat] 直接使用
java -jar apktool.jar[ShakaApktool.jar]
功能介绍:
1 支持中文apk名
2.支持非Android标准目录打包
3.支持png,9.png异常图片回编译
4.修复arrays.xml中的<item>如果含有“res/”,类型转换错误
5.支持xml中偏移位置错误导致空xml反编译错误
6.对异常字段和方法偏移容错
7.修复布局xml属性字段的name为style中的name错误
8.支持伪加密头的反编译
9.添加二次混淆功能,非\d\w字符,和超长类名会二次混淆成短名称
10.支持-d编译为java文件,netbean6.8可以debugging
11.自动判断debug模式,添加删除 android:debuggable 属性字段
12.对添加odex干扰回编译的文件做容错处理