APK 文件分析

概述

我們通過 Android studio APK Analyze 可以展開一個(gè)APK文件


image
  • META-INF
  • res
    • anim
    • color
    • drawable
    • drawable-hdpi
    • drawable-land
    • drawable-land-hdpi
    • drawable-mdpi
    • drawable-port
    • drawable-port-hdpi
    • layout
    • layout-land
    • layout-port
    • xml
  • AndroidManifest.xml
  • classes.dex
  • resources.arsc

META-INF

META-INF目錄下存放的是簽名信息嫂便,用來保證apk包的完整性和系統(tǒng)的安全鼎俘。里面包含了三個(gè)文件,MANIFEST.MF肥隆、CERT.SF、CERT.RSA砖织。

  • MANIFEST.MF

apk中的這個(gè)MANIFEST.MF藏斩,列出了apk的所有文件,以及這些文件內(nèi)容所對(duì)應(yīng)的base64-encoded SHA1 哈希值劫狠,

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

上述表示classes.dex這個(gè)文件的SHA1的哈希值為l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

  • CERT.SF

CERT.SF和MANIFEST.MF很相似,但是它描述的不是文件內(nèi)容的hash值牧抽,而是列出了MANIFEST.MF這個(gè)文件中每條信息的hash值嘉熊,舉例會(huì)明白些:

Name: classes.dex
SHA1-Digest: ubmMiUS24rU/6K5JloMVG4vHKIU=

上面這條hash值ubmMiUS24rU/6K5JloMVG4vHKIU=對(duì)應(yīng)的是MANIFEST.MF中下面這幾行字符串的hash值

Name: classes.dex
SHA1-Digest: l8Lc+gtdLvtxJ1K+kscUmWQGQ1E=

注:計(jì)算SHA1-Digest-Manifest時(shí)遥赚,輸入的字符串是三行扬舒,還要包括一行空白行,即’\r\n’凫佛。讲坎!

  • CERT.RSA

包含了公鑰和私鑰簽名后的一些信息
它的基本格式是這樣的:


image

res目錄

res目錄存放資源文件

目錄 資源類型
animator/ 用于定義屬性動(dòng)畫的 XML 文件孕惜。
anim/ 定義漸變動(dòng)畫的 XML 文件。(屬性動(dòng)畫也可以保存在此目錄中晨炕,但是為了區(qū)分這兩種類型衫画,屬性動(dòng)畫首選 animator/ 目錄。)
color/ 用于定義顏色狀態(tài)列表的 XML 文件瓮栗。請(qǐng)參閱顏色狀態(tài)列表資源
drawable/ 位圖文件(.png削罩、.9.png.jpg费奸、.gif)或編譯為以下可繪制對(duì)象資源子類型的 XML 文件:位圖文件九宮格(可調(diào)整大小的位圖)狀態(tài)列表形狀動(dòng)畫可繪制對(duì)象其他可繪制對(duì)象請(qǐng)參閱 可繪制對(duì)象資源弥激。
mipmap/ 適用于不同啟動(dòng)器圖標(biāo)密度的可繪制對(duì)象文件。如需了解有關(guān)使用 mipmap/ 文件夾管理啟動(dòng)器圖標(biāo)的詳細(xì)信息愿阐,請(qǐng)參閱管理項(xiàng)目概覽微服。
layout/ 用于定義用戶界面布局的 XML 文件。 請(qǐng)參閱布局資源缨历。
menu/ 用于定義應(yīng)用菜單(如選項(xiàng)菜單以蕴、上下文菜單或子菜單)的 XML 文件。請(qǐng)參閱菜單資源辛孵。
raw/ 要以原始形式保存的任意文件丛肮。要使用原始 InputStream 打開這些資源,請(qǐng)使用資源 ID(即 R.raw.*filename*)調(diào)用 Resources.openRawResource()魄缚。但是腾供,如需訪問原始文件名和文件層次結(jié)構(gòu),則可以考慮將某些資源保存在 assets/ 目錄下(而不是 res/raw/)鲜滩。assets/ 中的文件沒有資源 ID伴鳖,因此您只能使用 AssetManager 讀取這些文件。
values/ 包含字符串徙硅、整型數(shù)和顏色等簡(jiǎn)單值的 XML 文件榜聂。其他 res/ 子目錄中的 XML 資源文件是根據(jù) XML 文件名定義單個(gè)資源,而 values/ 目錄中的文件可描述多個(gè)資源嗓蘑。對(duì)于此目錄中的文件须肆,<resources> 元素的每個(gè)子元素均定義一個(gè)資源。例如桩皿,<string> 元素創(chuàng)建 R.string 資源豌汇,<color> 元素創(chuàng)建 R.color 資源。由于每個(gè)資源均用其自己的 XML 元素定義泄隔,因此您可以根據(jù)自己的需要命名文件拒贱,并將不同的資源類型放在一個(gè)文件中。但是,為了清晰起見逻澳,您可能需要將獨(dú)特的資源類型放在不同的文件中闸天。 例如,對(duì)于可在此目錄中創(chuàng)建的資源斜做,下面給出了相應(yīng)的文件名約定:arrays.xml苞氮,用于資源數(shù)組(類型化數(shù)組)。colors.xml:顏色值瓤逼。dimens.xml:尺寸值笼吟。strings.xml:字符串值。styles.xml:樣式霸旗。請(qǐng)參閱字符串資源赞厕、樣式資源更多資源類型
xml/ 可以在運(yùn)行時(shí)通過調(diào)用 Resources.getXML() 讀取的任意 XML 文件定硝。各種 XML 配置文件(如可搜索配置)都必須保存在此處皿桑。

resources.arsc

編譯后的二進(jìn)制資源文件,主要作用是App的資源索引表蔬啡,可以從二進(jìn)制的文件中查找到資源的相關(guān)信息诲侮,或者根據(jù)資源的id可以定位到二進(jìn)制文件中的位置

classes.dex文件

簡(jiǎn)單來說就是android系統(tǒng)的可執(zhí)行文件,類似于window系統(tǒng)的xx.exe,它包含應(yīng)用程序的全部操作指令以及運(yùn)行時(shí)數(shù)據(jù)

題外:ART 和 Dalvik

我們知道Java程序都是通過Java虛擬機(jī)執(zhí)行的箱蟆,Android應(yīng)用是采用Java開發(fā)的沟绪,基于移動(dòng)設(shè)備的特點(diǎn),如內(nèi)存以及電量等諸多方面跟一般的 PC 設(shè)備都有本質(zhì)的區(qū)別空猜,所以需要開發(fā)更符合移動(dòng)設(shè)備的用于執(zhí)行 Java 代碼的虛擬機(jī)绽慈,也就是Dalvik和 ART。
Dalvik和 ART 并不是完全按照J(rèn)VM的規(guī)范開發(fā)的辈毯,一般JVM虛擬機(jī)運(yùn)行的是 .class 文件坝疼,而 Dalvik和 ART 運(yùn)行的是DEX文件。

Java 虛擬機(jī)執(zhí)行 .class 格式的字節(jié)碼谆沃。每一個(gè) Java 文件對(duì)應(yīng)一個(gè) .class 的字節(jié)碼文件钝凶,JVM 在運(yùn)行時(shí)為每一個(gè)執(zhí)行到的類裝載字節(jié)碼。而 Android 設(shè)備上為了提高執(zhí)行效率唁影,在編譯 Android 項(xiàng)目時(shí)耕陷,Android 通過 SDK 提供的工具 dex.jar 會(huì)把所有的 .class 文件最終打包成一個(gè)或者多個(gè) .dex 文件

ART 和 Dalvik 區(qū)別

Dalvik 是 ART 的前身 窥摄,從 Android L 開始锉矢,Android 開始啟用了新設(shè)計(jì)的虛擬機(jī) ART 。
ART 比起 Dalvik 有以下優(yōu)勢(shì):

  • 預(yù)先 (AOT) 編譯

ART 引入了預(yù)先編譯機(jī)制巍耗,可提高應(yīng)用的性能锌介。在安裝時(shí)嗜诀,ART 使用設(shè)備自帶的 dex2oat 工具來編譯應(yīng)用,并為目標(biāo)設(shè)備生成經(jīng)過編譯的應(yīng)用可執(zhí)行文件

  • 垃圾回收方面的優(yōu)化

我們知道執(zhí)行GC操作的時(shí)候,任何線程的任何操作都會(huì)需要暫停裹虫,等待GC操作完成之后肿嘲,其他操作才能夠繼續(xù)運(yùn)行融击,所以GC在 Dalvik 時(shí)代也是經(jīng)常被人詬病的筑公,它會(huì)導(dǎo)致界面卡頓。而ART 在GC導(dǎo)致顯示不穩(wěn)定尊浪、界面響應(yīng)速度緩慢以及其他問題都做了優(yōu)化

參考

android中簽名原理和安全性分析之meta-inf文件講解
https://source.android.com/devices/tech/dalvik

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匣屡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拇涤,更是在濱河造成了極大的恐慌捣作,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹅士,死亡現(xiàn)場(chǎng)離奇詭異券躁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掉盅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門也拜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人趾痘,你說我怎么就攤上這事慢哈。” “怎么了永票?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵卵贱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我侣集,道長(zhǎng)键俱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任世分,我火速辦了婚禮方妖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罚攀。我一直安慰自己党觅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布斋泄。 她就那樣靜靜地躺著杯瞻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炫掐。 梳的紋絲不亂的頭發(fā)上魁莉,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼旗唁。 笑死畦浓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的检疫。 我是一名探鬼主播讶请,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屎媳!你這毒婦竟也來了夺溢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤烛谊,失蹤者是張志新(化名)和其女友劉穎风响,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丹禀,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡状勤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了双泪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片持搜。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖攒读,靈堂內(nèi)的尸體忽然破棺而出朵诫,到底是詐尸還是另有隱情,我是刑警寧澤薄扁,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布剪返,位于F島的核電站,受9級(jí)特大地震影響邓梅,放射性物質(zhì)發(fā)生泄漏脱盲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一日缨、第九天 我趴在偏房一處隱蔽的房頂上張望钱反。 院中可真熱鬧,春花似錦匣距、人聲如沸面哥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚卫。三九已至,卻和暖如春尸红,著一層夾襖步出監(jiān)牢的瞬間吱涉,已是汗流浹背刹泄。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怎爵,地道東北人特石。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鳖链,于是被迫代替她去往敵國(guó)和親姆蘸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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