Android组件化小叙
2016-01-27 15:09
375 查看
转载地址:/article/11570869.html
一:为什么要组件化
二:如何解决
传统的方式是发包执行更新操作。每次发包的周期时间因素重。
H5代替。
google multidex。(解决dex数过大问题ApI21)
删减无用代码。
购买付费的proguard。
重构
components loader
三:插件开发
项目地址:https://github.com/houkx/android-pluginmgr/blob/master/README.md
四:开源项目
五:相关:
http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html
一:为什么要组件化
1. 大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限。 2. 数据包越来越大。 3. 功能业务增加删减不灵活。 4. 动态改变资源文件。eg 主题 5. 模块耦合度大。 6. 升级不灵活,每次都需要验证。 7. 内存占用率高。 8. 流浪消耗大。 9. 并行开发效率低。
二:如何解决
传统的方式是发包执行更新操作。每次发包的周期时间因素重。
H5代替。
google multidex。(解决dex数过大问题ApI21)
android-support-multidex.jar 使用说明: 3.1. 从sdk\extras\android\support\multidex\library\libs 目录将android-support-multidex.jar导入工程中 3.2. 如果你的工程中已经含有Application类,那么让它继承android.support.multidex.MultiDexApplication类, 3.3.如果你的Application已经继承了其他类并且不想做改动,那么还有另外一种使用方式,覆写attachBaseContext()方法: 3.4 eg
public class MyApplication extends FooApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
删减无用代码。
购买付费的proguard。
重构
components loader
三:插件开发
项目地址:https://github.com/houkx/android-pluginmgr/blob/master/README.md
1:如何使用: 2:如何构建: 3:目前支持 a normal apk is regard as plug-in start activity from plug-in start other activiy from plug activity plug activity with theme plug with custom Application plug with .so support android2.x 4:技术说明: 4.1 反射方式执行java代码,通常执行操作。 4.2 利用 Java ClassLoader 的原理。Java ClassLoader基础 4.3 android jvm读取为dex 文件, java ---- class ---- dex 故在执行方式中需将java文件转换为dex文件 ,android提供了 DexClassLoader,PathClassLoader,URLClassLoader 使用方法: DexClassLoader pluginClassLoader = new DexClassLoader(dexPath, optimizedDirectory, libraryPath, parentClassLoader); dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓 存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件。 URLClassLoader:可以加载java中的jar,但是由于dalvik不能直接识别jar,所以此方法在android中无法使用,尽管还有这个类 4.4 目前可以解决的loader方式有: R文件,android基础组件,value,xml,注册问题,生命周期管理问题。数据访问,jar包,so库载入。 4.5 存在问题有: 1:权限问题声明需在宿主对象中及如果在应用的apk中使用了主apk不支持的权限不能正常使用。 2:广播动态注册ok,再manifest中注册无效。 3:so类库的加载需要声明在住apk中。 4: 4.6 执行方式: 开发 > android组件化 > image2016-1-28 10:59:6.png
四:开源项目
1. 360 DroidPlug 组件化公司 http://www.apkplug.com/ 2. https://github.com/singwhatiwanna/dynamic-load-apk 3. DL方式做法: activity的工作主要是由ContextImpl来完成的, activity中是一个叫做mBase的成员变量。注意到Context中有如下两个抽象方法,实际上context就是通过它们来获取资源的,这两个抽象方法的真正实现在ContextImpl中。也即是说,只要我们自己实现这两个方法,就可以解决资源问题了。 ``` python public abstract AssetManager getAssets(); public abstract Resources getResource();
五:相关:
http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html
相关文章推荐
- Android图文混排的实现思路
- Android 自定义View (一)
- Android Binder进程间通信深入分析
- 安卓wifi管理操作帮助类
- Android Handler Looper Message 详细分析
- 20160127_Android程序完全退出的方法
- Android中attr自定义属性详解
- android原理 :android 从低位开始读
- Android Studio之版本管理工具Git (图文教程)
- 线程池ThreadPoolExecutor的使用和有关ThreadFactory和thread等粗解
- Mac版Android Studio工具快捷键总结
- Android自动弹出软键盘
- Android Design Support Library常用控件介绍(上)
- Android中长按ListView实现批量删除
- android 滑动listview ActionBar渐变
- Android解析XML详解
- windows cmd下使用adb logcat命令
- Android自学之sqlite数据的基本操作和事物的简单应用
- Android数据储存之SharedPreferences
- AsyncTask详解