Android 插件技術:動態加載dex技術初探
Android動態加載dex技術初探
http://blog.csdn.net/u013478336/article/details/50734108html
Android使用Dalvik虛擬機加載可執行程序,因此不能直接加載基於class的jar,而是須要將class轉化爲dex字節碼。node
Android支持動態加載的兩種方式是:DexClassLoader和PathClassLoader,DexClassLoader可加載 jar/apk/dex,且支持從SD卡加載;PathClassLoader聽說只能加載已經安裝在Android系統內APK文件。android
Android插件化基礎
Android簡單來講就是以下操做:c++
- 開發者將插件代碼封裝成Jar或者APK
- 宿主下載或者從本地加載Jar或者APK到宿主中
- 將宿主調用插件中的算法或者Android特定的Class(如Activity)
插件化開發—動態加載技術加載已安裝和未安裝的apk
http://blog.csdn.net/u010687392/article/details/47121729?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 爲何引入動態加載技術?git
- 一個應用程序dex文件的方法數最大不能超過65536個
- 可讓應用程序實現插件化、插拔式結構,對後期維護有益
什麼是動態加載技術程序員
動態加載技術就是使用類加載器加載相應的apk、dex、jar(必須含有dex文件),再經過反射得到該apk、dex、jar內部的資源(class、圖片、color等等)進而供宿主app使用。github
關於動態加載使用的類加載器算法
- PathClassLoader - 只能加載已經安裝的apk,即/data/app目錄下的apk。
- DexClassLoader - 能加載手機中未安裝的apk、jar、dex,只要能在找到對應的路徑。
插件化技術學習
緣由:編程
各大廠商都碰到了AndroidNative平臺的瓶頸:設計模式
- 從技術上講,業務邏輯的複雜代碼急劇膨脹,各大廠商陸續觸到65535方法數的天花板;同時,對模塊熱更新提出了更高的要求。
- 在業務層面上,功能模塊的解耦以及維護團隊的分離也是大勢所趨。
插件化技術主要解決兩個問題:
- 代碼加載
- 資源加載
代碼加載
類的加載可使用Java的ClassLoader機制,還須要組件生命週期管理。
資源加載
用AssetManager的隱藏方法addAssetPath。
Android插件化原理解析——Hook機制之動態代理
使用代理機制進行API Hook進而達到方法加強。
靜態代理
動態代理:能夠簡單理解爲JVM能夠在運行時幫咱們動態生成一系列的代理類。
代理Hook
若是咱們本身建立代理對象,而後把原始對象替換爲咱們的代理對象,就能夠在這個代理對象中隨心所欲了;修改參數,替換返回值,稱之爲Hook。
整個Hook過程簡要總結以下:
- 尋找Hook點,原則是靜態變量或者單例對象,儘可能Hook public的對象和方法,非public不保證每一個版本都同樣,須要適配。
- 選擇合適的代理方式,若是是接口能夠用動態代理;若是是類能夠手動寫代理也可使用cglib。
- 偷樑換柱-用代理對象替換原始對象
暱稱:
不改了 退出 訂閱評論
[Ctrl+Enter快捷鍵提交]
【免費】從零開始學編程,開發者專屬實驗平臺免費實踐!
【推薦】如今註冊又拍雲,首月可享 200G CDN流量,還可免費申請 SSL 證書
【推薦】阿里雲「全民雲計算」優惠升級
· Mozilla開源語音識別庫,幫助將來App開發
· Facebook被集體「聲討」,要求更改ReactJS許可
· Dropbox公司的Go語言探索之路
· 摩拜單車登錄意大利 每半小時0.3歐元
· 暴風魔鏡推出「白日夢」VR盒子,強行兼容谷歌Daydream
» 更多新聞...
· 程序員的工做、學習與績效
· 軟件開發爲何很難
· 唱吧DevOps的落地,微服務CI/CD的範本技術解讀
· 程序員,如何從平庸走向理想?