Android應用包的生成/管理/訪問

APK編譯

APK項目的源文件包括:

  1. 資源文件
  2. aidl源文件
  3. Java源文件
  4. Java靜態(tài)庫
  5. Java共享庫
  6. 所需的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é)果中的交集,即為滿足所有字段的條件。

資源訪問

資源常見的值一般為以下幾種:

  1. String/Color/boolean/int類型:res/values/xxx.xml
  2. Drawable類型:res/drawable/xxx.png
  3. layout
  4. 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開頭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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