1. 程式人生 > >Android 專案模組化開發,提高開發效率。

Android 專案模組化開發,提高開發效率。

把Demo放在第一!!!

隨著需求的增加,程式碼量隨之變得龐大、臃腫。於是產生了很多影響開發效率的問題。
例如:
1. 方法數超過65K。
2. 程式編譯執行一次至少1-2分鐘。
3. 程式碼變得難以管理,影響閱讀及修改效率。
4. 程式碼之間緊密度高,不好拆分任務……

為了解決上述種種問題,我設計了一個簡單的模組化機制。

先來看看我專案的大致結構吧。

這裡寫圖片描述

圖中可以看到,專案裡有很多自定義的程式碼庫和第三方庫(統計、反饋、視訊、熱修復、音樂、支付、分享、更新等等)。其中標註紅線的lib都是可拆分的模組。
我們可以做到,在開發Debug的時候按需載入這些模組,使得編譯速度大大提升,而在正式Release的時候,則全量自動載入。

Debug版本編譯大小
這裡寫圖片描述

Release版本編譯大小
這裡寫圖片描述

按需編譯,不僅體積變小了,編譯速度也提升了好幾倍。

圖解

這裡寫圖片描述

如何實現反射

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> 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 你的實現類所在的包名.**{*;}

這裡寫圖片描述