手把手教你擼一個簡單的模塊化框架項目

先上代碼ModuleDemo

1. 什麼是模塊化

將一個APK拆分成多個模塊(組件)進行開發,開發階段可以獨立測試,通用模塊可以重複使用,開發完成之後可以將所有模塊(組件)整合爲一個完整的APK。

2. 爲什麼會出現模塊化

在我門進行項目的開發過程中,隨着業務的不斷增加、代碼量越來越多、具有相同功能或者模塊出現。從而就會導致以下問題的發生。
1. 各種業務耦合在一起,不利於後期開發人員的維護。
2. 一個小小的改動需要全局編譯,而且編譯時間過長,浪費時間。
爲了解決以上問題,所以就出現了模塊化。

3. 爲什麼要使用模塊化

  1. 模塊化可以模塊解耦、避免模塊耦合、提升團隊的開發效率。
  2. 單獨模塊可以獨立運行、單獨模塊不依賴其他模塊、結構清晰、層次明顯、減少維護成本與開發時間。
  3. 每個組件業務可以由開發者自行決定採取MVP/MVC等架構,而不影響整體項目架構。
  4. 優秀的代碼、組件可以快速的移植使用。

4. 實際操作

1. 創建版本控制

在我們開發過程中,可能多個模塊之間會使用到相同的配置例如編譯版本,第三方依賴等,這些相同的東西后期如果需要更改,我們可能需要改很多地方,故可以寫一個配置文件。

  1. 首先創建一個文件,起名叫config.gradle
    創建配置文件
  2. 創建好配置文件之後,接下來就是如何去寫配置文件。
    配置文件的寫法
  3. 寫好配置文件,接下來就需要引用配置文件,因爲我們這個配置文件需要整個項目都可以使用,故我們需要在整個項目的gradle中去引用。如圖在project的gradle中添加下面代碼即可。
apply from: "config.gradle"

配置文件引用
4. 引用完配置文件之後就是,如何去相應的gradle中使用了。紅色框中就是在gradle中的使用方法。

/**
    1. rootProject.ext是固定不變的。
    2. android 是之前寫配製文件自己隨便命名的東西 。
    3. compileSdkVersion 是數組中的key。
**/
compileSdkVersion rootProject.ext.android.compileSdkVersion

在相應的gradle中使用配置文件
好了版本控制文件的創建、書寫、引用、使用,就已經完成了。

2. 動態切換lib和App模式

上面爲什麼使用模塊化有提過,每個模塊可以獨立運行的,所以我沒就需要對該模塊進行設置,用了控制什麼時候該模塊是App什麼時候該模塊是lib

  1. 首先我們需要在之前的配置文件(config.gradle)中定義一個變量用來控制該模塊是App還是lib
    定義用來控制該模塊是App還是lib的變量
  2. 在相應模塊的gradle中添加下面代碼,用來判斷是APP還是lib
if (rootProject.ext.isApp) {
    //當前模塊爲app
    apply plugin: 'com.android.application'
} else {
    //當前模塊爲lib
    apply plugin: 'com.android.library'
}

用來判斷當前模塊是APP還是lib

3. AndroidManifest的管理

同上,每個app在運行的時候,需要一個默認的啓動頁,而在lib中則是不需要的。所以app的AndroidManifest和lib的AndroidManifest是不一樣的,所以我們就需要將lib和app的AndroidManifest分開寫

  1. 創建AndroidManifest,我們在每個module的main目錄下創建一個文件,這個文件就叫module用來存放App模式下的AndroidManifest,而之前的AndroidManifest則作爲lib模式下的AndroidManifest
    分別創建app模式下的AndroidManifest和lib模式下的AndroidManifest
  2. 創建好AndroidManifest下來就是使用了,在相應的moudle的gradle添加下面代碼
 sourceSets {
        main {
            if (rootProject.ext.isApp) {
                //  這裏需要注意manifest.srcFile中的manifest的m爲小寫,大寫M會報錯,下面也是一樣
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //  lib模式下,去除多餘的debug包
               java{
                   exclude 'debug/**'
               }

            }
        }
    }

配置AndroidManifest

4. 組件之間資源命名衝突

我們知道有的時候,在不同的Module下,有可能存在着相同名稱的資源,例如佈局文件,顏色,等等,而出現上面的情況,就會導致我們app中不同module的資源衝突。解決方式就是在相應Module的gradle添加下面代碼

  resourcePrefix "modulea_"//modulea_根據自己的module進行命名

資源衝突解決方式

5. 組件之間Activity的跳轉、數據傳遞、Fragment的使用
  1. Activity的跳轉和Fragment的使用我們可以使用第三方框架ARouter,這裏我不多說,不會的可以去網上搜怎麼使用
  2. 數據傳遞也可以使用EventBus

好了到這裏就搭建好一個簡單的模塊化框架了,我這裏只是說下怎麼搭建模塊化項目,至於項目中的的目錄結構我沒說多少,不同的人有不同的理解,無非就是多加幾個Module。
最後貼上我自己寫的代碼ModuleDemo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章