ShakaApktool前身算的上是RsApktool,也可以說是一個(gè)全新的項(xiàng)目.兩者在理念上都是增強(qiáng)Apktool工具.包含了apktool_2.0.2.jar、apktool_2.0.3.jar、中文版ShakaApktool.jar、和簽名工具signapk.jar等RsApktool是基于未發(fā)布的Apktool1.5.3分支做的增強(qiáng),并在其代碼上做的修改.只發(fā)布過一個(gè)版本,并未開源.
ShakaApktool在2013-12-25號(hào)初始化項(xiàng)目,使用AspectJ切面編程方式對(duì)原Apktool增強(qiáng).而且他不再只顧埋頭苦干自己的活兒,作為Apktool的增強(qiáng)的同時(shí),也會(huì)向原庫中提交一些代碼.
ShakaApktool定位在保護(hù)和突破保護(hù)的對(duì)立中.
ShakaApktool 使用方法:
-advance,--advanced 查看更多信息.
-lng,--language <Locale> 顯示語言, e.g. zh-CN, zh-TW
//ShakaApktool特有功能,如果需要英文輸入直接修改apktool.bat 內(nèi) -Duser.language=en 中文即zh
-version,--version 查看版本信息
編譯指令****************************************
d[ecode] [options] <file_apk>
//d 反編譯參數(shù),一般命令主要是apktool d file.apk 以下參數(shù)為d 后面可選參數(shù)
--api <API> 將按照API級(jí)別生成文件信息, 例如.14是ICS.
-b,--no-debug-info 不輸出debug信息 (.local, .param, .line, etc.)
-d,--debug 反編譯調(diào)試模式. 查看更多信息.
--debug-line-prefix <prefix> 反編譯調(diào)試模式下, 給Smali添加行前綴 默認(rèn)是 "a=0;// ".
-k,--keep-broken-res 當(dāng)出現(xiàn)錯(cuò)誤或者一些resources被放棄時(shí)使用,例如."Invalid config flags detected. Dropping resources", 即使在有錯(cuò)誤的情況下,你還是想要強(qiáng)行反編譯. 你之后必須手動(dòng)修復(fù)相關(guān)錯(cuò)誤才能進(jìn)行編譯.
-m,--match-original 保持盡可能的接近原始文件.防止重新生成.
-df,--default-framework 使用默然的框架資源文件
//ShakaApktool獨(dú)有功能,主要作用刪除$HOME/apktool/framework/1.apk然后釋放新的1.apk(主要解決apktool內(nèi)android-framework.jar升級(jí)后本地1.apk版本太低導(dǎo)致反編譯失敗問題)
-f,--force 強(qiáng)制刪除目標(biāo)文件夾
//這個(gè)應(yīng)該用的比較多,在使用apktool d file.apk時(shí)候提示你目標(biāo)文件夾已存在,加-f就會(huì)直接刪除目標(biāo)文件夾
-fui,--fuck_unkown_id 反編譯遇到未知資源id繼續(xù)執(zhí)行
//ShakaApktool獨(dú)有功能,主要是反編譯遇到一些未知的id直接跳過
-ir,--ignore_res_decode_error 忽略資源反編譯的錯(cuò)誤
//ShakaApktool獨(dú)有功能,主要是忽略資源反編譯的錯(cuò)誤
-mc,--more-recognizable-characters 顯示更多的可識(shí)別字符
//ShakaApktool獨(dú)有功能,顯示更多的可識(shí)別字符,比如中文不在以\uxxxx編碼顯示,而是直接顯示中文,讓smali更容易讀
-n9,--no-9png 不解析.9格式的資源
//ShakaApktool獨(dú)有功能,在編譯時(shí)直接不解析.9格式的文件
-o,--output <dir> 輸出文件夾名字. 默認(rèn)是 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按照安裝框架那一步來執(zhí)行
-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按照安裝框架那一步來執(zhí)行
-xn,--xml_attribute_name_correct xml attribute name correct. May be has problem, not recommended.
//ShakaApktool獨(dú)有功能,xml 屬性名實(shí)際是通過id來查找的,但是baxml中保留了一份顯示的屬性名。xml 屬性名實(shí)際是通過id來查找的,但是baxml中保留了一份顯示的屬性名,已經(jīng)測(cè)試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 復(fù)制原始AndroidManifest.xml和META-INF文件.可以查看項(xiàng)目更多信息
-d,--debug 調(diào)試模式編譯. 檢查項(xiàng)目的更多信息
-f,--force-all 跳過已編譯檢查,強(qiáng)制編譯所有文件
//覆蓋已經(jīng)存在的文件,強(qiáng)制編譯resources.arsc 和 classes.dex
-o,--output <dir> 輸出apk路徑. 默認(rèn)是 dist/name.apk
//輸出apk路徑,默認(rèn)在dist/xxx.apk 例如:apktool b out -o new.apk(new.apk路徑在命令執(zhí)行的目錄)
-p,--frame-path <dir> 使用指定目錄下的框架文件
//使用指定目錄下的框架文件,例如:apktool b -p foo/bar out
****************************************其他說明****************************************
-q 和 -v 命令
//-q 編譯時(shí)不輸出任何信息,直接靜默模式編譯,例如:apktool -q d或apktool -q b
//-v 編譯時(shí)輸出更多詳細(xì)信息,例如:apktool -v d或apktool -v b
也可以直接不借助apktool[apktool.bat] 直接使用
java -jar apktool.jar[ShakaApktool.jar]
功能介紹:
1 支持中文apk名
2.支持非Android標(biāo)準(zhǔn)目錄打包
3.支持png,9.png異常圖片回編譯
4.修復(fù)arrays.xml中的<item>如果含有“res/”,類型轉(zhuǎn)換錯(cuò)誤
5.支持xml中偏移位置錯(cuò)誤導(dǎo)致空xml反編譯錯(cuò)誤
6.對(duì)異常字段和方法偏移容錯(cuò)
7.修復(fù)布局xml屬性字段的name為style中的name錯(cuò)誤
8.支持偽加密頭的反編譯
9.添加二次混淆功能,非\d\w字符,和超長(zhǎng)類名會(huì)二次混淆成短名稱
10.支持-d編譯為java文件,netbean6.8可以debugging
11.自動(dòng)判斷debug模式,添加刪除 android:debuggable 屬性字段
12.對(duì)添加odex干擾回編譯的文件做容錯(cuò)處理