Android安裝的時候系統都做了些什麼

引言:

一個APK文件就是一個壓縮包,可以想壓縮包一樣解壓打包。

Android是Liunx系統的,

使用過的文件系統可能因製造商或Android版本不同,新版本的使用ext3文件系統。三星使用的是自己的文件系統RFS。

Android裏面最重要的一個概念就是沙箱。

編譯程序
Java文件會怎麼編譯
1.Java文件會正常通過Java JVM編譯成.class文件
2.dx工具把.class文件編譯成Dalvik虛擬機運行的格式。
這個特殊的java格式文件通過DVM(Dalvik Virtual Machine)運行,一個通過開源的JRE實現的

更新
在更新的安卓中,當使用jack的時候轉換步驟可以跳過,這種方式中java文件被編譯成dx格式。
自從 4.4(KitKat)Android就已經有新的ART runtime ,在Android 5 (Lollipop)正式替換Dalvik Virtual。

Asset目錄安裝的時候會怎麼樣?

Android提供Assets是爲了添加一些二進制的文件的,比如數據庫之類的,文件會直接放到目錄下,不會經過編譯或者優化。
不要隨便把文件放在這個目錄下,要正確使用。

/res/raw在安裝的時候會發生什麼?

就像Assets目錄一樣,你可以放二進制文件(Html文件/幫助文件),這些文件會被編譯優化,如果可能的話。

Manifest文件其他的XML文件會怎麼樣。

都會被存儲編譯成二進制的XML格式,進行過優化的。

沙箱

從Android OS來看,單個程序的特徵:

  • 自己的進程
  • 有單獨用戶 Like Liunx
  • 單獨的虛擬機
  • 在堆中分配內存
  • 文件系統中有指定的地址

每個Android的APP都限定有權限用戶才能訪問APP的內部的存儲空間。(被標準的Liunx系統的權限管理保護)有自己的DVM進程,不能被外部進程訪問。
如果要程序有從沙箱訪問外部的功能,需要在配置文件中聲明權限。

安裝的時候的步驟

1.程序創建的時候會創建新的用戶
2.程序創建的時候會給新用戶訪問內部存儲的權限
3.apk文件會被解壓到這個內部的文件夾下
4.Android-Manifest配置文件會被解析,並且裏面的intnet-filter的生命會被系統註冊。
5.現在程序安裝好了,可以啓動了。、

APK解壓之後各種文件在什麼位置上。
當你安裝一個app的時候,系統會複製apk到/data/app文件夾下,並且用包名跟安裝次數去命名。
我嘗試手動安裝一個app,複製粘貼APk文件到/data/app文件夾下,併發重啓設備我發現它就像一個安裝的app一樣工作的很好。
任何安裝的APP都有以下特徵
1.APK文件在/data/app/package-number.apk
2.dex文件在data/dalvik-cache/data@[email protected]@class.dex
3.lib文件在/data/data/packagelib文件下
4.data在/data/data/package文件下
5.cache在/data/data/package/cache文件下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章