Android动态加载学习
2016-02-16 17:57
274 查看
今天看了下动态加载相关的一些东西,记录一下:
一:原理
一听动态加载肯定就和classloader有关,Android中的动态加载自然也不例外。由于Android是采用dalvik虚拟机,所以在Android中可以使用的classloader只有DexClassLoader和PathClassLoader两种了。这两种主要的区别就是DexClassLoader可以加载任何路径的apk/dex/jar,而PathClassLoader只能加载/data/app中的apk,也就是已经安装到手机中的apk。这个也是PathClassLoader作为默认的类加载器的原因,因为一般程序都是安装了,在打开,这时候PathClassLoader就去加载指定的apk(解压成dex,然后在优化成odex)就可以了。
二:动态加载jar过程
1.在app中定义动态加载部分的接口,创建实现该接口的动态加载类,导出该类文件的jar包,利用”..\android_sdk\build-tools\19.1.0“中的dx工具将jar转为dex再打包为jar。(有的文章说是platform-tools目录下的dx,是错的)
2.从网络或其他途径获取需要的jar包,并放在制定目录
3.代码中利用DexClassLoader获取动态加载的类的实例。注意:需要加载的jar包或者apk放在data/data/包名目录和sd卡都可以,不过:new DexClassLoader(dexPath,dexOutputDirs,null,getClassLoader()); 中的第二参数,dexoutputdirs不能放在"..data/data/包名目录"以外的地方,否则会报错。
4.调用动态加载的类
上面的过程只是最简单的动态加载特定代码,不适用与加载资源和加载完整应用的情形。
三:动态加载资源文件(待续)
主要是反射调用assetmanager的[b]addAssetPath将需要加载的apk中的资源加载进宿主app,然后在加载进的apk中得到资源[/b]
一:原理
一听动态加载肯定就和classloader有关,Android中的动态加载自然也不例外。由于Android是采用dalvik虚拟机,所以在Android中可以使用的classloader只有DexClassLoader和PathClassLoader两种了。这两种主要的区别就是DexClassLoader可以加载任何路径的apk/dex/jar,而PathClassLoader只能加载/data/app中的apk,也就是已经安装到手机中的apk。这个也是PathClassLoader作为默认的类加载器的原因,因为一般程序都是安装了,在打开,这时候PathClassLoader就去加载指定的apk(解压成dex,然后在优化成odex)就可以了。
二:动态加载jar过程
1.在app中定义动态加载部分的接口,创建实现该接口的动态加载类,导出该类文件的jar包,利用”..\android_sdk\build-tools\19.1.0“中的dx工具将jar转为dex再打包为jar。(有的文章说是platform-tools目录下的dx,是错的)
2.从网络或其他途径获取需要的jar包,并放在制定目录
3.代码中利用DexClassLoader获取动态加载的类的实例。注意:需要加载的jar包或者apk放在data/data/包名目录和sd卡都可以,不过:new DexClassLoader(dexPath,dexOutputDirs,null,getClassLoader()); 中的第二参数,dexoutputdirs不能放在"..data/data/包名目录"以外的地方,否则会报错。
4.调用动态加载的类
上面的过程只是最简单的动态加载特定代码,不适用与加载资源和加载完整应用的情形。
三:动态加载资源文件(待续)
主要是反射调用assetmanager的[b]addAssetPath将需要加载的apk中的资源加载进宿主app,然后在加载进的apk中得到资源[/b]
相关文章推荐
- ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
- AndroidStudio NDK , VisualStudio NDK
- Android中SwipeRefreshLayout和ViewPager左右滑动冲突的原因以及正确的解决方法
- android权限添加
- android studio AIDL跨进程通信
- Android开发者学习资料寻找的四大平台资源
- ListView或者GridView取消滑动效果
- Android开发中GridView的使用
- android 使用TableLayout 实现布局自动拉伸宽度
- Android编程之DialogFragment源码详解(二)
- Android编程之DialogFragment源码详解(一)
- 手机开启按键音后,Gallery滚动的时候会发出声音的问题
- Android中TextView深入使用----单独TextView实现图文混排
- Android学习-Layout布局
- Android关于混淆打包的记录
- [Android]Dagger2Metrics - 测量DI图表初始化的性能(翻译)
- androidStudio常见错误
- android Button按钮实现点击效果代码附带demo下载
- Android 状态栏,标题栏,屏幕高度获取总结
- Android热修复_待修复dex打包详细流程