普通的Android程序Dalvik虚拟机都是从一个默认的地方载入程序需要的类文件(dex文件),而Dalvik虚拟机还提供了从其他地方载入类的能力(比如从设备的内部存储空间以及互联网).
这种自定义类加载机制可以使用于一些场景:
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个类文件:
在打包的时候需要修改项目目录下的local.properties文件,把sdk.dir的值修改为对应的android SDK目录.例如:sdk.dir=E:\\google\\android-sdk-windows
另外不要忘记在default.properties中指定需要的android平台: 例如 target=android-9
然后就可以执行android install来build并且安装到模拟器或者手机上了.
载入自定义类的过程
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.