Kotlin搭建組件化應用模板

0.前言

隨着版本的迭代,項目可能愈來愈臃腫,愈來愈復發,編譯起來也很耗時。這個時候組件化開發就體現出優點了,每一個組件也就是每一個module能夠單獨運行,單獨編譯單獨測試,這爲項目的開發和測試節約了很多時間。git

1.問題

組件化開發須要解決的問題:github

1.1每一個組件既能夠單獨測試又能夠集成測試

1.2組件之間的方法調用

1.3組件間activity的跳轉和fragment的使用(router)

1.4部分集成測試

2.方案

2.1每一個組件既能夠單獨測試又能夠集成測試

每一個module創建一個gradle.properties文件,定義gradle變量isRunAlone用來控制當前控件時在單獨測試仍是集成測試bash

在module的build.gradle文件中,根據isRunAlone的值來肯定module的類型,application仍是libraryapp

同時每一個module當單獨運行時還須要一個Activity做爲默認啓動時的activity,而在集成運行是是不須要的,因此咱們須要定義兩個AndroidManifest文件框架

不要忘記單獨測試時爲module指定applicationId組件化

if (isRunAlone.toBoolean()) {
            applicationId "com.skateboard.modulea"
        }
複製代碼

2.2組件之間的方法調用

因爲組件間是彼此隔離的,爲了調用其餘組件的方法,咱們這裏定義了一個基本組件core,每一個組件都引用這個組件,在core組件裏定義其餘組件對外提供的方法,在其中注入其餘組件裏對接口的實現。 首先定義modulea的接口測試

定義servicefactory用來注入實現

最後就是在modulea中對接口的實現了

在modulea中的application中實現注入gradle

你們都知道,多個module狀況下,只有主module也就是聲明爲application的那個module的application會被初始化,那麼如何調用其餘module進行接口實現的注入呢?答案就是利用反射 首先定義ModuleConfig,指定每一個application的類名ui

在app的application的initModuleApp方法裏

一次調用每一個application的initModuleApp方法,這樣就實現了注入

2.3組件間activity的跳轉和fragment的使用(router)

這裏採用了阿里的ARouter框架做爲路由框架,須要注意的是使用kotlin時須要將build.gradle文件中的annoationprocessor改成kaptspa

2.4部分集成測試

咱們須要的是組件之間彼此隔離,各個組件之間的類是不能直接飲用的,可是若是使用compile在app主組件中引用其餘組件時,仍然能夠直接使用其餘組件的類。這個問題咱們能夠經過 Gradle 提供的方式來解決,Gradle 3.0 提供了新的依賴方式 runtimeOnly ,經過 runtimeOnly 方式依賴時,依賴項僅在運行時對模塊及其消費者可用,編譯期間依賴項的代碼對其消費者是徹底隔離的。

2.5其餘問題

另外有些其餘問題就是爲了不資源名字重複致使不能編譯經過,能夠爲每一個module的資源添加前綴,能夠在build.gradle文件中添加resourcePrefix進行資源前綴檢查

3.Demo

Github demo地址 Github

關注個人公衆號

相關文章
相關標籤/搜索