Java編譯器對工程本身的java代碼進行編譯,這些java代碼有三個來源:App的源代碼,有資源文件生成的R文件(aapt工具),AIDL文件生成的Java接口文件,產出爲.class文件
- 用AAPT編譯R.java文件
- 編譯AIDL的java文件
- 把java文件編譯成class文件
- class文件和依賴的三方庫文件通過dex工具生成Delvik虛擬機可執行的.dex文件,包含了所有的class信息,包括項目自身的class和依賴的class,產出爲.dex文件
- apkbuilder工具將.dex文件和編譯後的資源文件生成未經簽名對其的apk文件。這裏編譯後的資源文件包括兩部分,一是有aapt編譯後產生的資源文件,二是依賴的三方庫裏的資源文件。產出爲未經簽名的.apk文件
- 分別由JarSigner和zipalign對apk文件進行簽名和對齊,生成最終的apk文件
【通俗的講】
- 我們平時編譯時有時候會一直爆紅,編譯不過去,需要我們將build文件夾刪除然後重新打包,就是重新去構建R.java文件,裏面生成的有我們控件id之類的唯一信息
- 把aidl產生的java文件編譯進行
- 把java看成描述文檔,去生成.class文件讓計算機去認識
- 把所有的class文件去生成執行效率更高,體積更小的dex文件
- 把dex和資源文件一塊打包成我們常見到的apk文件
- 在apk文件上寫上我們的簽名
- 對齊,把apk中的未壓縮的資源進行‘對齊操作’,讓資源按照4字節的邊界進行對齊,這樣訪問速度更快
對齊肯定是在簽名後面,不然先對齊了,再去簽名不就把之前對齊的破壞了嘛