APK編譯
APK項目的源文件包括:
- 資源文件
- aidl源文件
- Java源文件
- Java靜態(tài)庫
- Java共享庫
- 所需的JNI動態(tài)庫
Java源碼在編譯前必須首先獲得R.java,R.java是編譯系統(tǒng)調(diào)用aapt工具從res目錄下的資源文件編譯而成的。
Java源文件 ----javac----> class文件 ----jar----> jar包 ----dx工具----> dex文件 --aapt--> unsigned.apk --signapk.jar--> signed.apk --zipalign邊界對齊--> package.apk
簽名的目的不是加密,而是認證。
程序包管理
能夠根據(jù)intent匹配到具體的四大組件。能夠把指定的intent轉(zhuǎn)換成一個具體的包含了程序包名稱及具體Component名稱的信息,以便Java類加載器加載具體的Component。
安裝和卸載程序的操作都是由Pms完成,安裝程序的過程包括在程序目錄下創(chuàng)建以包名稱命令的程序文件、創(chuàng)建程序數(shù)據(jù)目錄,以及把程序信息保存到相關(guān)的配置文件pakages.xml中,卸載過程則是相反的。
Intent匹配
按照基本的匹配類型定義幾個數(shù)據(jù)變量,比如action、scheme、mime等, 每個數(shù)據(jù)變量中保存所有只要滿足本條件的Component信息。當傳入一個Intent時,將intent-filter分解成這些基本的匹配條件,最終找到不同數(shù)據(jù)變量匹配結(jié)果中的交集,即為滿足所有字段的條件。
資源訪問
資源常見的值一般為以下幾種:
- String/Color/boolean/int類型:res/values/xxx.xml
- Drawable類型:res/drawable/xxx.png
- layout
- style
LayoutInflater在inflater布局時會通過反射去調(diào)用View的(Context context, AttributeSet attrs)構(gòu)造器。自定義View的第三個和第四個構(gòu)造函數(shù)除非顯式調(diào)用,不然不會通過xml調(diào)用。AttributeSet
保存了xml布局文件中View的自定義屬性的集合
屬性賦值優(yōu)先級:Xml定義>xml的style定義>defStyleAttr(主題可配置樣式)>defStyleRes(默認樣式)>NULL(主題中直接指定)。注意,defStyleRes只有在defStyleAttr為0或者主題中沒有配置時,才會生效;
APK是一種具有安裝格式的文件,安裝后將是另一個樣子。
一個應用程序的多個ContextImp對象實際共享了一個PakageInfo對象。
Assetmanager并不只是訪問項目中的res/assests目錄下的資源,而是訪問應用程序本身res下所有的資源,以及Framework的資源路徑。
系統(tǒng)資源的id值都是以0x01開頭,一般的應用程序的資源值是以0x07開頭。