Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 在Android中動態載入自定義類

在Android中動態載入自定義類

編輯:Android開發實例

普通的Android程序Dalvik虛擬機都是從一個默認的地方載入程序需要的類文件(dex文件),而Dalvik虛擬機還提供了從其他地方載入類的能力(比如從設備的內部存儲空間以及互聯網).

這種自定義類加載機制可以使用於一些場景:

  • dex文件只能包含最多64K的函數引用,對於大型的程序如果超過了該數字,就可以通過把程序打包為多個dex文件來實現,在程序運行的時候在加載這些需要的類
  • 一些開發框架可以通過運行時自定義類加載機制來設計出更加可擴展的框架
  • 通過該方式實現更加強壯的程序注冊機制,防止被人破解

Android有個示例項目演示了如何使用, 項目地址

http://code.google.com/p/android-custom-class-loading-sample/

要使用該示例,不能使用Eclipse插件ADT來打包必需通過該項目提供的Ant腳本, 另外該Ant腳本需要Android SDK 12版本, 可以通過Android SDK Manager來下載或者到如下地址下載,然後解壓到對應的目錄中

https://dl-ssl.google.com/android/repository/tools_r12-windows.zip

https://dl-ssl.google.com/android/repository/platform-tools_r06-windows.zip

在示例中有3個類文件:

  • com.example.dex.MainActivity: UI界面,在這個類中動態載入需要的類
  • com.example.dex.LibraryInterface: 動態載入類的接口定義
  • com.example.dex.lib.LibraryProvider: 動態載入類的實現,該類在打包的時候會打包到另外一個dex文件中

在打包的時候需要修改項目目錄下的local.properties文件,把sdk.dir的值修改為對應的android SDK目錄.例如:sdk.dir=E:\\google\\android-sdk-windows

 

另外不要忘記在default.properties中指定需要的android平台: 例如 target=android-9

然後就可以執行android install來build並且安裝到模擬器或者手機上了.

載入自定義類的過程

  1. 獲取需要載入的自定義類的dex文件,可以是設備本地的文件或者互聯網上的文件
  2. 把獲取到的自定義類dex文件保存到程序的內部儲存空間中:new File(getDir(“dex”, Context.MODE_PRIVATE),SECONDARY_DEX_NAME);
  3. 通過DexClassLoader類加載器來解析優化前面的dex文件
  4. 通過DexClassLoader的loadClass函數來載入類
  5. 通過獲得到的類的newInstance函數來生成需要的對象
  6. 開始使用獲取到的動態類對象~\(≧▽≦)/~啦啦啦

Android提供的示例項目中,通過Ant打包後把com.example.dex.lib.LibraryProvider類放入了程序的assets文件夾中,然後從這裡讀取需要動態載入的類. 為了演示從互聯網載入類和使用Eclipse ADT插件來build該示例,我們對該項目做了簡單修改,修改後的示例項目地址:

http://code.google.com/p/goodev-demo 中 的android-custom-class-loading-goodev-demo

在該示例中刪除了com.example.dex.lib.LibraryProvider類,我們把該類打包為dex文件並且放入到了互聯網上下載地址: http://goodev.sinaapp.com/and/secondary_dex.jar

在程序運行的時候先從該地址下載需要的類文件,然後解析.

詳細情況請參考項目中的代碼注釋

修改後的項目可以通過Eclipse ADT來build.

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved