我們生活中使用手機,經常每一天不停的安裝或者刪除應用。那這些應用都是怎麼做出來的呢?到底是怎麼運行工作的呢?安裝包裡面到底有什麼文件呢?
今天我給大家揭開這個謎題。說到應用,大家肯定想到是程式設計師編程出來的。如果從最基礎的編程講起,可能大家感覺太複雜,也太晦澀難懂。所以我今天就從別人做好的應用下手,看看應用有哪些文件?這些文件到底起怎麼作用?
下面我們以安卓安裝包apk文件作為例子。apk其實就是一個壓縮文件,把它的文件擴展名改成zip格式之後可以直接解壓,今天,我們拆開一個安卓應用的安裝包,看看裡面到底都有些什麼。
我們隨便拿個app做實驗,因為apk是個壓縮文件,所以直接把它的擴展名改為zip即可。
將安裝包解壓後,我們可以看到裡面的一些文件夾和文件
這些文件有什麼用呢?這些應用所有的代碼、資源和配置文件都在裡面,接下來我主要給大家講一些主要文件的功能。
1,/assets
通常這個文件夾裡存放的是一些靜態文件,比如說明文檔或者字體文件,我們以上圖app安裝包為例,它的/assets目錄下有個名為fonts的子目錄,打開它,我們可以看到兩個ttf格式的字體文件。
當然了,不同類型應用的安裝包,它/assets裡面包含的資源也是不同的,比如有些瀏覽器應用的/assets目錄下有很多html格式的文件,這些文件用瀏覽器可以直接打開。
2,/META-INF
通常這個文件夾裡存放的是安裝包的籤名證書和安裝包中所有文件哈希值的計算結果。
應用程式的安裝包在打包的時候,每個文件都會經過校驗計算,計算結果就存放在/META-INF裡,我們可以直接使用文本編輯器來打開後綴名為MF和SF的記錄這些文件校驗計算結果的文件。
在我們安裝一個應用的時候,系統會首先根據/META-INF裡的文件校驗結果來核實安裝包中文件的正確性和完整性,目的是確保安全,避免用戶安裝到遭受過病毒感染的或者被惡意篡改過的應用程式。
這個文件夾下的RSA格式的文件是開發者對該應用程式進行籤名的籤名證書文件,你若玩過塞班系統,那應該對這個詞並不陌生,這也是為了保證應用程式和系統的安全,籤名文件不是純文本格式,不過當我們用文本編輯器打開它時,可以在亂碼中零散地看到Microsoft Corporation字樣。
3,/res
res是resource的縮寫,裡面存放的是應用程式的資源文件,比如圖片素材和布局文件,這個文件夾下有很多子目錄,
其中,以anim開頭的文件夾,通常裡面存放的是應用程式的動畫效果資源;
以color開頭的文件夾,通常裡面存放的是應用程式的各種顏色值;
以drawable開頭的文件夾,通常裡面存放的是應用程式的圖片或圖形資源;
有些以drawable開頭的文件夾在結尾會跟著諸如hdpi、xhdpi這樣表示解析度的字符,目的是適配不同解析度的屏幕。
我們來進入一個以drawable開頭的文件夾,可以看到裡面有png和webp格式的圖片,其中,webp格式的圖片可以用旗魚瀏覽器打開:
以layout開頭的文件夾,通常裡面存放的是應用程式的界面布局文件;
4,/AndroidManifest.xml
AndroidManifest.xml是一個單獨的文件,裡面包含很多信息,比如應用程式的包名、數據權限、接口權限、版本信息、安裝參數等等,另外,它還可以聲明應用程式的每一個組件及其屬性,聲明應用程式所申請的權限、進程,聲明顯示模式等等,AndroidMainfest.xml裡面包含的信息太多了,單獨為它開一篇文章都不為過。這是一個非常重要的文件,它的名稱是固定的,不能隨意修改。
5,/classes.dex
這是可在安卓的Dalvik虛擬機中直接運行的字節碼,是由JAVA的原始碼經過複雜的編譯形成的,和傳統的.class文件相比,dex文件的運行效率更高。
6,/lib
通常這個文件夾中會存放一些應用程式依賴的庫,一般以.so結尾。
到了這裡你可能會問了,你讓我們把apk安裝包拆開了,可是裡面的東西有好多都看不了啊,用記事本打開以後是亂碼阿,有什麼用啊?大家先不要著急,我們下一期接著講安卓應用反編譯。可能這個大家看得比較枯燥,下一期我帶大家去做實戰。