Apktool 參數(shù)詳解

上一篇?Apktool 使用教程 - 簡書?簡單說明了以下 apktool 的基本使用国章。能夠反編譯和重新打包一個apk了褥芒。

如果你學(xué)會了使用 -d 袜蚕,-b 進行apk的反編譯和重新打包。

那么恭喜你皮获!apktool你已經(jīng)學(xué)會了90%的使用了,你也能夠反編譯絕大多數(shù)的apk了纹冤。

但事情總有小小的例外洒宝,有那么一些apk它就是不讓你如愿。比如加固過的赵哲,或者一些廠商的系統(tǒng)應(yīng)用待德,它們依賴了一些系統(tǒng)特有的resource,你不得不進行特殊處理枫夺,才能成功的反編譯将宪,甚至有時候需要你去修改apktool的源碼。

所以橡庞,這一篇文章就是告訴你那些你平時可能不注意的小細節(jié)较坛,不常用的參數(shù)到底有什么用。

注意:本文所用apktool版本為扒最,2.4.1丑勤。

官網(wǎng)介紹:Apktool - Documentation

1、-d 反編譯

apktool d bar.apk -o baz

apktool decode bar.apk -o baz

你可以使用-o來指定反編譯的輸出目錄吧趣,如上命令為 反編譯 bar.apk 到 baz 目錄法竞,也可以使用絕對路徑耙厚,輸出到任意目錄。

decode 和 d 以及 -d 等效岔霸。

2薛躬、-b 打包apk

apktool b bar -o new_bar.apk

apktool build bar -o new_bar.apk

你可以使用-o來指定重新打包的輸出目錄,如上命令為 重新編譯bar目錄下的結(jié)構(gòu)到 new_bar.apk呆细,也可以使用絕對路徑型宝,輸出到任意目錄。

build 和 b 以及 -b 等效絮爷。

3趴酣、if?or?install-framework 安裝 framework

(1)apktool if framework-res.apk

安裝?framework-res.apk 到默認目錄,默認目錄如下:

????????unix -?$HOME/.local/share/apktool

????????windows -?%UserProfile%\AppData\Local\apktool

????????mac -?$HOME/Library/apktool

(2)apktool if com.htc.resources.apk -t htc

安裝?framework-res.apk 到默認目錄坑夯,并添加tag標記岖寞,最終可能生成 2-htc.apk,前序的數(shù)字柜蜈,由所安裝的framework的pkgId決定慎璧。個人理解pkgId是所安裝的 framework 的apk中的Manifest中的package字段值。

(3)apktool if framework-res.apk -t baz -p foo/bar

安裝?framework-res.apk 到 -p 指定的目錄跨释,并添加tag標記,最終可能在 foo/bar 目錄下生成 2-htc.apk

安裝framework的作用厌处,是讓apktool能夠識別一些廠商自定義的屬性或resource鳖谈,否則將反編譯失敗。

每一個版本的apktool都會自帶有最新AOSP的framework阔涉,能支持絕大多數(shù)的apk反編譯缆娃。當需要特殊的framework時,如何尋找相應(yīng)的framework瑰排,請參閱apktool文檔中的內(nèi)容贯要,此處不再詳述。

如何找到framework


(4)注意:你需要自己確保默認的framework是最新的

apktool會將自帶的framework拷貝到默認路徑下椭住,各平臺默認路徑崇渗,請參考上文。

但是京郑,當你升級apktool之后宅广,最好是去掉默認路徑下的framework,讓apktool自動安裝最新的(自帶的)framework些举。

同時跟狱,當默認路徑不可用(通常是無權(quán)限)時,apktool會使用 /tmp 目錄户魏,但是此目錄通常都不穩(wěn)當驶臊,你可以使用?--frame-path(也就是上文提到的 -p ) 指定一個其他的穩(wěn)定的目錄挪挤。

從2.2.1版本開始,apktool加入了相應(yīng)的命令关翎,可以完成此操作扛门。?

apktool empty-framework-dir?

命令會清除framework目錄下的所有已安裝的framework

(5)apktool不會判斷framework是否重復(fù)安裝了,你可以任意安裝

4笤休、使用指定的framework進行反編譯

當你安裝了不同的framework尖飞,并且其中一些framework可能是互不兼容的,那么你在反編譯的時候需要指定使用相應(yīng)的framework店雅。

安裝不同的framework政基,并指定tag

使用指定的framework進行反編譯,注意查看log中的區(qū)別闹啦。

使用不同的framework進行反編譯

同時需要說明的是沮明,當你使用了指定的framework進行反編譯后,想要重新打包apk時窍奋,不需要再進行framework的指定了荐健,apktool會自動使用反編譯時使用的framework進行重新打包。

5琳袄、關(guān)于.9圖的問題

谷歌官方文檔上有.9圖的說明江场,但是說漏了一些東西。

.9圖有兩種存在形式窖逗,一種是"源碼"形式址否,一種是經(jīng)過編譯處理的形式。

"源碼"形式很容易得到碎紊,我們平時寫apk所用的到就是這種形式佑附,網(wǎng)上也能方便的找到。而apk中的.9圖仗考,是經(jīng)過編譯處理后的圖音同。

"源碼"形式的.9圖,帶有透明的邊框秃嗜,而編譯后的.9圖权均,不再存在這種透明邊框,編譯后的圖存在一種叫做?npTc 數(shù)據(jù)塊的結(jié)構(gòu)中锅锨。你不能方便的查看和修改它螺句,但是Android系統(tǒng)可以更快的讀取和使用它。

以上的情況就會導(dǎo)致橡类,apktool不能直接去修改.9圖蛇尚,而需要依賴谷歌官方的工具 -- aapt進行處理。

6顾画、Options

? ? 常用的配置

(1)-version, --version

? ? 輸出當前工具版本

(2)-v, --verbose

? ? 輸出所有l(wèi)og取劫,此參數(shù)必須放在第一位

(3)-q, --quiet

? ? 靜默模式匆笤,與?-v, --verbose 相反,此參數(shù)必須放在第一位

(4)-advance, --advanced

? ? 進行每一步操作前谱邪,打印相應(yīng)log炮捧。默認開啟。


????清空framework的配置

(1)-f, --force

? ? 強制清除目標目錄

(2)-p, --frame-path <DIR>

? ? 指定加載framework的目錄

? ? 反編譯的配置

(1)-api, --api-level <API>

? ? 指定生成smali文件所用的api等級惦银,默認使用targetSdkVersion版本

(2)-b, --no-debug-info

? ??防止baksmali寫出調(diào)試信息(.local咆课,.param,.line等)扯俱。如果您要比較來自不同版本的同一APK的smali书蚪,則首選使用。

(3)-f, --force

? ? 如果反編譯的目標目錄存在迅栅,將會被強制清空

(4)--force-manifest?

? ? 強制反編譯 AndroidManifest.xml文件殊校,優(yōu)先級高于?-s, --no-src 配置。

(5)--keep-broken-res

? ? 如果出現(xiàn)?"Invalid Config Flags Detected. Dropping Resources..." 錯誤读存,這表示apk中有apktool不能識別的結(jié)構(gòu)为流。可能是apktool不支持的更新的api版本让簿,亦或者是該apk為不規(guī)則的apk敬察。你可以添加此配置,以跳過錯誤尔当,但后續(xù)你需要手動修復(fù)這些錯誤静汤。

(6)-m, --match-original

? ? 將各文件處理為最接近原生的形式,將會導(dǎo)致不能備重新打包居凶。

? ? Ps:我試了下,格式確實更接近原生藤抡,但是我重新打包也是成功了(打包成功侠碧,但并未簽名安裝)。

(7)--no-assets

? ? 不處理和拷貝屬于?unknown 的資源文件缠黍。

(8)-o, --output <DIR>

? ? 指定輸出目錄

(9)--only-main-classes

? ? 只反編譯apk根目錄下的dex文件弄兜,如:classes[0-9].dex

? ? 通過閱讀源碼發(fā)現(xiàn),此配置的作用為:反編譯根目錄下的以?classes 開頭瓷式,并以 .dex 結(jié)尾的dex文件替饿,不僅限于0-9

(10)-p, --frame-path <DIR>

? ? 指定存儲和加載framework的目錄

(11)-r, --no-res

? ? 不反編譯資源,保留?resources.arsc 為原來的樣子贸典,如果你只是需要修改代碼视卢,此配置會加快反編譯和重新打包的速度。

(12)-s, --no-src

? ? 不反編譯代碼廊驼,即不處理 dex文件据过。如果你只是需要修改資源惋砂,此配置會加快反編譯和重新打包的速度。

(13)-t, --frame-tag <TAG>

? ? 使用指定的framework進行反編譯绳锅,前文有述西饵。

????重新打包配置

(1)-a, --aapt <FILE>

? ? 指定使用的aapt,當指定目錄未找到aapt時鳞芙,會使用apktool自帶的aapt進行處理眷柔。

(2)-api, --api-level <API>

? ? 指定處理smali文件的api版本,默認使用minSdkVersion版本

(3)-c, --copy-original

? ? ?拷貝原始 AndroidManifest.xml?and?META-INF 到apk包體中原朝。將會在2.5.0版本移除此功能驯嘱。

(4)-d, --debug

? ? ?在 AndroidManifest 加入?debuggable="true" 配置

? ? ? ? 此配置,不會覆蓋已經(jīng)存在的debuggable配置竿拆。

(5)-f, --force-all

? ? 當生成的文件存在時宙拉,進行強制覆蓋

(6)-nc,--no-crunch

? ? 此配置會傳遞給aapt,參閱:

? ??Expose the aapt --no-crunch option by Novex · Pull Request #1849 · iBotPeaches/Apktool · GitHub

? ??aapt build in apktool is not support new options · Issue #1232 · iBotPeaches/Apktool · GitHub

? ? 禁止對資源文件的處理

(7)-o, --output <FILE>

? ? 指定apk的輸出目錄

(8)-p, --frame-path <DIR>

? ? 指定加載framework的路徑

(9)--use-aapt2

? ? 使用aapt2進行打包


以上就是apktool目前支持的所有配置丙笋,下一篇文章谢澈,將會進一步深入源碼,去看看apktool到底都做了些什么御板。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锥忿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怠肋,更是在濱河造成了極大的恐慌敬鬓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笙各,死亡現(xiàn)場離奇詭異钉答,居然都是意外死亡,警方通過查閱死者的電腦和手機杈抢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門数尿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惶楼,你說我怎么就攤上這事右蹦。” “怎么了歼捐?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵何陆,是天一觀的道長。 經(jīng)常有香客問我豹储,道長贷盲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任剥扣,我火速辦了婚禮晃洒,結(jié)果婚禮上慨灭,老公的妹妹穿的比我還像新娘。我一直安慰自己球及,他們只是感情好氧骤,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吃引,像睡著了一般筹陵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镊尺,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天朦佩,我揣著相機與錄音,去河邊找鬼庐氮。 笑死语稠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的弄砍。 我是一名探鬼主播仙畦,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼音婶!你這毒婦竟也來了慨畸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衣式,失蹤者是張志新(化名)和其女友劉穎寸士,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碴卧,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡弱卡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了住册。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婶博。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖界弧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情搭综,我是刑警寧澤垢箕,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站兑巾,受9級特大地震影響条获,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒋歌,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一帅掘、第九天 我趴在偏房一處隱蔽的房頂上張望委煤。 院中可真熱鬧,春花似錦修档、人聲如沸碧绞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讥邻。三九已至,卻和暖如春院峡,著一層夾襖步出監(jiān)牢的瞬間兴使,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工照激, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留发魄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓俩垃,卻偏偏與公主長得像励幼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吆寨,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容