Android 插件化內功修煉

在將APP項目插件化時,遇到bug容易一頭霧水。其實要想理解插件化技術,首先需要了解Android系統的底層實現。下面是我自己總結學習插件化的知識點。弄懂以下幾點,應該對網上各種插件化的框架原理明白個7788了。ps.(Android插件化發展歷史,這裏有一份插件框架的發展歷史小結,感興趣可以看一下)


第一點:App打包的流程。一次打包操作中途到底經歷了什麼?資源打包、dex生成、簽名等每一步都如何執行?具體過程可以參考Android項目構建流程


第二點:App的安裝流程。安裝App的這段代碼在什麼地方?App下載到本地之後,放到哪個目錄下?然後會生成哪些文件?如何下載一個增量包?從本地具體哪個位置取出這個包?包的具體命名規則是什麼?等等等。。。理解安裝過程有助於理解插件化的框架流程和熱修復的原理。


第三點:Activity註冊和生命週期問題。 系統啓動Activity,是如何實例化並控制其生命週期的?瞭解這點是爲了弄明白插件框架如何控制Activity的生命週期做鋪墊。


第四點是其它講解Android插件化文章最常提到的,也是插件化框架的重點。


第四點:Dex如何加載和資源衝突解決。插件框架如何把Dex中的類加載到內存?我們需要了解各種Classloader。資源加載衝突怎麼解決?這個問題有好幾種解決方案。一種是是重寫Context的getAsset、getResource之類的方法,偷換概念,讓插件讀取插件裏的資源,但缺點就是宿主和插件的資源id會衝突,需要重寫AAPT。另一種是重寫AMS中保存的插件列表,從而讓宿主和插件分別去加載各自的資源而不會衝突。第三種方法,就是打包後,執行一個腳本,修改生成包中資源id。Small框架就是用的第三種解決辦法。


以上就是弄懂插件框架需要的內功修煉,其實安卓插件化從2012年嶄露頭角,到2015年爆發到現在技術已經趨近成熟,各大公司的項目代碼需要插件化的應該早已搭建好自己的框架。工作中也許只需要學會使用公司框架,維護自己模塊的代碼即可。不過如果對插件化更深層的技術感興趣,可以按照本文提到的四點,逐一學習,會對理解插件化原理有很大幫助。


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