當前位置:
首頁 > 科技 > IT之家學院:安卓的APK安裝包里都有些什麼?

IT之家學院:安卓的APK安裝包里都有些什麼?

應用程序是安卓系統重要的組成部分,我們可以通過很多方式在安卓系統上安裝應用程序,就像Windows系統的appx和塞班系統的sis一樣,安卓系統的應用程序也有其專屬的安裝包格式——apk。

apk的全稱是AndroidPackage,翻譯成中文就是「安卓安裝包」。既然apk是「包」,那就說明裡麵包著很多東西,這就讓我很好奇了,裡面到底有些什麼啊?

apk其實就是一個壓縮文件,把它的文件擴展名改成zip格式之後可以直接解壓,今天,IT之家就拆開一個安卓應用的安裝包,帶大家看看裡面到底都有些什麼。

我們今天開刀的小白鼠是微軟最近上架的待辦事項應用——Microsoft To-Do。

IT之家學院:安卓的APK安裝包里都有些什麼?

因為apk是個壓縮文件,所以直接把它的擴展名改為zip即可。

將安裝包解壓後,我們可以看到裡面的一些文件夾和文件:

IT之家學院:安卓的APK安裝包里都有些什麼?

應用程序所有的代碼、資源和配置文件都在裡面,我們來一個一個看。

一、/assets

通常這個文件夾里存放的是一些靜態文件,比如說明文檔或者字體文件,我們以Microsoft To-Do的安裝包為例,它的/assets目錄下有個名為fonts的子目錄,打開它,我們可以看到三個ttf格式的字體文件。

IT之家學院:安卓的APK安裝包里都有些什麼?

IT之家學院:安卓的APK安裝包里都有些什麼?

當然了,不同類型應用的安裝包,它/assets裡面包含的資源也是不同的,比如有些瀏覽器應用的/assets目錄下有很多html格式的文件,這些文件用旗魚瀏覽器可以直接打開:

IT之家學院:安卓的APK安裝包里都有些什麼?

二、/META-INF

IT之家學院:安卓的APK安裝包里都有些什麼?

通常這個文件夾里存放的是安裝包的簽名證書和安裝包中所有文件哈希值的計算結果。

應用程序的安裝包在打包的時候,每個文件都會經過校驗計算,計算結果就存放在/META-INF里,

我們可以直接使用文本編輯器來打開後綴名為MF和SF的記錄這些文件校驗計算結果的文件:

IT之家學院:安卓的APK安裝包里都有些什麼?

在我們安裝一個應用的時候,系統會首先根據/META-INF里的文件校驗結果來核實安裝包中文件的正確性和完整性,目的是確保安全,避免用戶安裝到遭受過病毒感染的或者被惡意篡改過的應用程序。

這個文件夾下的RSA格式的文件是開發者對該應用程序進行簽名的簽名證書文件,玩過塞班系統的同學應該對這個詞並不陌生,這也是為了保證應用程序和系統的安全,簽名文件不是純文本格式,不過當我們用文本編輯器打開它時,可以在亂碼中零散地看到Microsoft Corporation字樣。

IT之家學院:安卓的APK安裝包里都有些什麼?

三、/res

res是resource的縮寫,裡面存放的是應用程序的資源文件,比如圖片素材和布局文件,這個文件夾下有很多子目錄,

IT之家學院:安卓的APK安裝包里都有些什麼?

其中,以anim開頭的文件夾,通常裡面存放的是應用程序的動畫效果資源;

IT之家學院:安卓的APK安裝包里都有些什麼?

以color開頭的文件夾,通常裡面存放的是應用程序的各種顏色值;

IT之家學院:安卓的APK安裝包里都有些什麼?

以drawable開頭的文件夾,通常裡面存放的是應用程序的圖片資源;

IT之家學院:安卓的APK安裝包里都有些什麼?

有些以drawable開頭的文件夾在結尾會跟著諸如hdpi、xhdpi這樣表示解析度的字元,目的是適配不同解析度的屏幕。

IT之家學院:安卓的APK安裝包里都有些什麼?

我們來進入一個以drawable開頭的文件夾,可以看到裡面有png和webp格式的圖片,其中,webp格式的圖片可以用旗魚瀏覽器打開:

IT之家學院:安卓的APK安裝包里都有些什麼?

以layout開頭的文件夾,通常裡面存放的是應用程序的界面布局文件;

IT之家學院:安卓的APK安裝包里都有些什麼?

以mipmap開頭的文件夾,Microsoft To-Do在裡面存放了應用圖標。

IT之家學院:安卓的APK安裝包里都有些什麼?

四、/AndroidManifest.xml

IT之家學院:安卓的APK安裝包里都有些什麼?

AndroidManifest.xml是一個單獨的文件,裡面包含很多信息,比如應用程序的包名、數據許可權、介面許可權、版本信息、安裝參數等等,另外,它還可以聲明應用程序的每一個組件及其屬性,聲明應用程序所申請的許可權、進程,聲明顯示模式等等,AndroidMainfest.xml裡面包含的信息太多了,單獨為它開一篇文章都不為過。這是一個非常重要的文件,它的名稱是固定的,不能隨意修改。

五、/classes.dex

這是可在安卓的Dalvik虛擬機中直接運行的位元組碼,是由JAVA的源代碼經過複雜的編譯形成的,和傳統的.class文件相比,dex文件的運行效率更高。

六、/lib

雖然Microsoft To-Do的安裝包中不包含這個文件夾,不過它在其他安卓應用程序安裝包中的出鏡率還是挺高的,通常這個文件夾中會存放一些應用程序依賴的庫,一般以.so結尾。

有人可能會問了,你帶我們把apk拆開了,可是裡面的東西有好多都看不了啊,打開以後是亂碼,有什麼用啊?不要著急,請接著往下看。

七、安卓應用的反編譯

是的,安卓應用安裝包里的很多文件中的內容我們是不能直接看到的,比如Microsoft To-Do應用,它裡面的xml文件和dex文件用文本編輯器打開以後顯示的是亂碼,如果你想愉快地看到這些文件的真身,那就需要對它的安裝包進行反編譯。

要對安卓應用進行反編譯,我們需要做一下準備:

環境準備:

安裝JAVA:官網地址

IT之家學院:安卓的APK安裝包里都有些什麼?

如何判斷你的JAVA是否安裝成功了呢?很簡單,打開命令提示符,輸入命令:

java

回車,如果顯示如下:

IT之家學院:安卓的APK安裝包里都有些什麼?

那就說明JAVA安裝成功了。

工具準備:

在開始之前我們先來說說這三個工具是幹啥的

apktool的作用是把apk中那些直接打開之後顯示為亂碼的xml文件翻譯成明文;

dex2jar的作用是將classes.dex轉化為.jar文件;

jd-gui的作用是查看.jar文件中的源代碼。

我們開始吧

首先,我們新建一個文件夾(任何位置都可以,小編把文件夾建在了桌面上),然後把我們下載好的三個工具扔進去;

IT之家學院:安卓的APK安裝包里都有些什麼?

解壓那兩個zip格式的壓縮包到當前文件夾;

IT之家學院:安卓的APK安裝包里都有些什麼?

接著把你要處理的apk文件扔到這個文件夾中的某個地方,小編的做法是在這個文件夾里再建了一個名為apk的文件夾,把apk文件扔到了apk文件夾里:

IT之家學院:安卓的APK安裝包里都有些什麼?

準備工作至此完成,我們開始翻譯xml。

打開命令提示符,cd進你剛剛新建的存放著那三個工具的目錄,以小編的電腦為例,則是輸入命令:

cd C:UsersLenovoDesktopapktools

IT之家學院:安卓的APK安裝包里都有些什麼?

接著,輸入命令:

java -jar apktool_2.0.1.jar d -f [apk文件所在位置.apk] -o MMTS

然後回車。

以小編的為例,則是輸入:

java -jar apktool_2.0.1.jar d -f C:UsersLenovoDesktopapktoolsapk odo.apk -o MMTS

如果一切順利的話,將顯示如下:

IT之家學院:安卓的APK安裝包里都有些什麼?

這時,你來到你那三個工具所在的文件夾,你會看到裡面新增了一個文件夾,名為MMTS,打開它,你就會看到你想要的東西:

IT之家學院:安卓的APK安裝包里都有些什麼?

我們來嘗試打開一個xml文件:

IT之家學院:安卓的APK安裝包里都有些什麼?

很好,這次終於不是亂碼了。

接著我們來反編譯應用程序的java源代碼

我們來到存放那三個工具的文件夾,打開裡面的dex2jar-2.0文件夾,把apk包中的classes.dex扔進去。

打開命令提示符,cd進dex2jar-2.0所在目錄;

IT之家學院:安卓的APK安裝包里都有些什麼?

輸入命令:

d2j-dex2jar classes.dex

回車。

如果一切順利的話,將顯示如下:

IT之家學院:安卓的APK安裝包里都有些什麼?

這時,我們回到dex2jar-2.0文件夾,可以看到一個新生成的名為classes-dex2jar.jar的文件,這就是我們需要的文件。

我們來到存放那三個工具的文件夾,打開裡面的jd-gui-windows-1.4.0文件夾,雙擊jd-gui.exe來運行jd-gui。

IT之家學院:安卓的APK安裝包里都有些什麼?

依次點擊File-Open file,選擇我們剛剛得到的classes-dex2jar.jar,打開它,你就能看到應用程序的JAVA源代碼了。

IT之家學院:安卓的APK安裝包里都有些什麼?

需要注意的是,有些應用,它的class是被混淆過的(比如Microsoft To-Do,如下圖):

IT之家學院:安卓的APK安裝包里都有些什麼?

裡面的類文件名稱和方法名稱都採取了a、b、c…這樣的命名方式。

這樣做為了防止反編譯,不過就算這樣,我們通過反編譯得到的源代碼也不是不能看。

好的,今天我們分析了安卓應用程序安裝包的結構和裡面的文件和文件夾的作用,甚至還通過反編譯看到了源代碼,如果你是安卓應用開發的初學者,想拆開一個apk安裝包來研究和參考,那麼希望這篇文章可以對你有所幫助。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT之家 的精彩文章:

小米電視4A體驗評測:語音助手1.0時代的嘗鮮作
49999元:海信發布全球首款88英寸超短焦4K激光電視
科普文:飛梭太空筆的傳奇經歷揭秘
首批面向小米和自家:LG推遲為蘋果供應OLED屏幕

TAG:IT之家 |

您可能感興趣

【IT之家學院】Raid到底是啥?
IT之家學院:無損讓你的SSD性能翻倍!
IT之家學院:4G網路LTE大科普
倫敦國王學院和 NVIDIA 合作,為 NHS 內的醫院建設人工智慧平台
今年文理學院太火爆!擠破頭!還有BU、Duke、MIT…
ALICEACADEMY(艾麗絲學院)美妝試驗場:海灘上演繹彩妝時尚大片
【WELL學院】帶你走進RCA
《我的英雄學院》將與TOWER RECORDS CAFE聯動
形象規劃師·自學院:什麼是AICI·CIM?
IT之家學院:WP改機型報錯?看這
《我的英雄學院》in J-WORLD TOKYO舉辦決定
IT之家攝影學院
《我的英雄學院》與J-WORLD TOKYO聯動決定
樂動五四丨中藥學院:We Are One!
XIUMIN向開設學院的朋友送去花環!賀詞被贊SENSE滿分
China GT珠海站《淘汽學院》Dr.凱——凱旋而歸!
華為ICT學院湖北生物科技職業學院HCNA-R&S定製班順利結課
IT之家學院:最詳細的IPv6獲取教程
Nike Air Mag「鯊魚面具」、Vans×梵高美術館、LEGO 做了一座魔法學院……
谷安學院DevOps認證強勢來襲!IT經理人必考