Android组件化小叙

来源:互联网 发布:淘宝手机转动主图360度 编辑:程序博客网 时间:2024/06/06 01:49

转载地址:http://blog.csdn.net/hwpjiayou/article/details/50594489

一:为什么要组件化

1. 大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限。2. 数据包越来越大。3. 功能业务增加删减不灵活。4. 动态改变资源文件。eg  主题5. 模块耦合度大。6. 升级不灵活,每次都需要验证。7. 内存占用率高。8. 流浪消耗大。9. 并行开发效率低。

二:如何解决

  1. 传统的方式是发包执行更新操作。每次发包的周期时间因素重。
  2. H5代替。
  3. 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);
    }
    }

  4. 删减无用代码。

  5. 购买付费的proguard。
  6. 重构
  7. 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

0 0
原创粉丝点击