隨着版本的迭代,項目可能愈來愈臃腫,愈來愈復發,編譯起來也很耗時。這個時候組件化開發就體現出優點了,每一個組件也就是每一個module能夠單獨運行,單獨編譯單獨測試,這爲項目的開發和測試節約了很多時間。git
組件化開發須要解決的問題:github
每一個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"
}
複製代碼
因爲組件間是彼此隔離的,爲了調用其餘組件的方法,咱們這裏定義了一個基本組件core,每一個組件都引用這個組件,在core組件裏定義其餘組件對外提供的方法,在其中注入其餘組件裏對接口的實現。 首先定義modulea的接口測試
在modulea中的application中實現注入gradle
你們都知道,多個module狀況下,只有主module也就是聲明爲application的那個module的application會被初始化,那麼如何調用其餘module進行接口實現的注入呢?答案就是利用反射 首先定義ModuleConfig,指定每一個application的類名ui
這裏採用了阿里的ARouter框架做爲路由框架,須要注意的是使用kotlin時須要將build.gradle文件中的annoationprocessor改成kaptspa
咱們須要的是組件之間彼此隔離,各個組件之間的類是不能直接飲用的,可是若是使用compile在app主組件中引用其餘組件時,仍然能夠直接使用其餘組件的類。這個問題咱們能夠經過 Gradle 提供的方式來解決,Gradle 3.0 提供了新的依賴方式 runtimeOnly ,經過 runtimeOnly 方式依賴時,依賴項僅在運行時對模塊及其消費者可用,編譯期間依賴項的代碼對其消費者是徹底隔離的。
另外有些其餘問題就是爲了不資源名字重複致使不能編譯經過,能夠爲每一個module的資源添加前綴,能夠在build.gradle文件中添加resourcePrefix進行資源前綴檢查
Github demo地址 Github
關注個人公衆號