Android 项目模块化开发,提高开发效率。

把Demo放在第一!!!

这里提供一个Demo,点击进入下载页

Github:https://github.com/601367322/MyFast

随着需求的增加,代码量随之变得庞大、臃肿。于是产生了很多影响开发效率的问题。
例如:
1. 方法数超过65K。
2. 程序编译运行一次至少1-2分钟。
3. 代码变得难以管理,影响阅读及修改效率。
4. 代码之间紧密度高,不好拆分任务……

为了解决上述种种问题,我设计了一个简单的模块化机制。

先来看看我项目的大致结构吧。

Android 项目模块化开发,提高开发效率。_第1张图片

图中可以看到,项目里有很多自定义的代码库和第三方库(统计、反馈、视频、热修复、音乐、支付、分享、更新等等)。其中标注红线的lib都是可拆分的模块。
我们可以做到,在开发Debug的时候按需加载这些模块,使得编译速度大大提升,而在正式Release的时候,则全量自动加载。

Debug版本编译大小
这里写图片描述

Release版本编译大小
这里写图片描述

按需编译,不仅体积变小了,编译速度也提升了好几倍。

图解

Android 项目模块化开发,提高开发效率。_第2张图片

如何实现反射

public class PluginManager {

    IOne one;

    ITwo two;

    private static PluginManager mInstance;

    public PluginManager() {
        try {
            one = getImpl("com.example.fast.impl.OneImpl");
            two = getImpl("com.example.fast.impl.TwoImpl");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private  T getImpl(String className) {
        try {
            Class clazz = Class.forName(className);
            return (T) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    public static PluginManager getInstance() {
        if (mInstance == null) {
            synchronized (PluginManager.class) {
                if (mInstance == null) {
                    mInstance = new PluginManager();
                }
            }
        }
        return mInstance;
    }

    public static IOne getOne() {
        return getInstance().one;
    }

    public static ITwo getTwo() {
        return getInstance().two;
    }

}

如何调用

public void onOneBtnClick(View view) {
    if (PluginManager.getOne() != null) {
        PluginManager.getOne().startActivity(this);
    }
}

public void onTwoBtnClick(View view) {
    if (PluginManager.getTwo() != null) {
        PluginManager.getTwo().startActivity(this);
    }
}

如何实现按需加载

gradle已经为我们提供里很方便的功能。

compile project(':lib.one') //任何时候都会加载
releaseCompile project(':lib.two') //打包的时候加载

特别注意

一定要注意混淆的规则,不能讲被反射的类混淆掉,否则会无法反射。

-keep class 你的实现类所在的包名.**{*;}

Android 项目模块化开发,提高开发效率。_第3张图片

你可能感兴趣的:(Android,Studio,Android)