[轉]Android 插件技術:動態加載dex技術初探

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平臺的瓶頸:設計模式

  1. 從技術上講,業務邏輯的複雜代碼急劇膨脹,各大廠商陸續觸到65535方法數的天花板;同時,對模塊熱更新提出了更高的要求。
  2. 在業務層面上,功能模塊的解耦以及維護團隊的分離也是大勢所趨。

插件化技術主要解決兩個問題:

  1. 代碼加載
  2. 資源加載

代碼加載

類的加載可使用Java的ClassLoader機制,還須要組件生命週期管理。

資源加載

用AssetManager的隱藏方法addAssetPath。

Android插件化原理解析——Hook機制之動態代理

使用代理機制進行API Hook進而達到方法加強。

靜態代理

動態代理:能夠簡單理解爲JVM能夠在運行時幫咱們動態生成一系列的代理類。

代理Hook

若是咱們本身建立代理對象,而後把原始對象替換爲咱們的代理對象,就能夠在這個代理對象中隨心所欲了;修改參數,替換返回值,稱之爲Hook。

整個Hook過程簡要總結以下:

  1. 尋找Hook點,原則是靜態變量或者單例對象,儘可能Hook public的對象和方法,非public不保證每一個版本都同樣,須要適配。
  2. 選擇合適的代理方式,若是是接口能夠用動態代理;若是是類能夠手動寫代理也可使用cglib。
  3. 偷樑換柱-用代理對象替換原始對象

 

 
 
 
0
0
 
 
 
« 上一篇: Hanlder + 弱引用防內存漏泄示例*
» 下一篇: 超詳細的Activity與Fragment生命週期函數
posted @ 2016-09-18 16:31 #2$5T1G 閱讀( 115) 評論( 0) 編輯 收藏
 
相關文章
相關標籤/搜索