天天看點

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

文章目錄

  • ​​一、元件化簡介​​
  • ​​二、建立元件化應用​​
  • ​​1、建立工程及殼應用子產品​​
  • ​​2、建立業務元件子產品​​
  • ​​3、建立功能元件子產品​​
  • ​​4、建立基礎元件子產品​​
  • ​​三、依賴庫子產品 / 應用子產品 切換設定​​
  • ​​1、build.gradle 建構腳本切換設定​​
  • ​​2、AndroidManifest.xml 清單檔案切換設定​​

GitHub 位址 : ​​https://github.com/han1202012/Componentization​​

一、元件化簡介

在 ​​元件化專欄​​ 中 , 詳細介紹了元件化的實作 , 本系列部落格繼續對元件化中 Gradle 建構過程 進行優化 ;

Android 應用常用架構 :

  • 子產品化 : 預設的 Android Studio 中的工程 就是子產品化設計的 , Project 下的每個 Module 項目 都是一個子產品 ;
  • 元件化 : 在子產品化的基礎上 , 每個子產品都可以獨立運作 , 子產品 需要在 Library 子產品 和 Application 子產品
  • 插件化 : 開發一個 宿主應用 , 在宿主應用中內建 插件化架構 , 在該架構中運作 插件 Apk ;

元件化開發中 , 一般将應用劃分為若幹子產品 , 如分層結構 :

  • 應用殼子產品 : 應用子產品
  • 業務元件子產品 : 依賴庫子產品 / 應用子產品 互相切換
  • 功能元件子產品 : 依賴庫子產品 / 應用子產品 互相切換
  • 基礎元件子產品 : 依賴庫子產品

特别注意 : 建立 依賴庫子產品 / 應用子產品 互相切換的子產品 , 建議建立時建立為 應用子產品 , 因為依賴庫子產品比應用子產品少很多檔案 , 都需要自己補齊 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

分層結構 , 可以很好的避免 , 代碼全部寫在一個子產品中 , 一撸到底 , 一般單人開發的時候很容易這麼幹 ;

二、建立元件化應用

GitHub 位址 : ​​https://github.com/han1202012/Componentization​​

1、建立工程及殼應用子產品

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )
【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

在 " 應用殼子產品 " 中 , 隻實作 自定義 Application 類 和 啟動頁 ;

實作自定義 Application 類 :

package kim.hsl.componentization

import android.app.Application

class MyApplication: Application() {
    override fun onCreate() {
        super.onCreate()
    }
}      

在 AndroidManifest.xml 清單檔案中注冊該 Application :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.componentization">

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Componentization">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>      

MainActivity 作為啟動頁使用 ;

2、建立業務元件子產品

右鍵點選工程名 , 在彈出的菜單中選擇 " New / Module " 選項 ,

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇建立 " Phone & Tablet " 類型的 Module 子產品 , 作為 業務元件子產品 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇預設的空白界面 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇預設的 Activity ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

3、建立功能元件子產品

右鍵點選工程名 , 在彈出的菜單中選擇 " New / Module " 選項 ,

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇建立 " Phone & Tablet " 類型的 Module 子產品 , 作為 功能元件子產品 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇預設的空白界面 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇預設的 Activity ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

4、建立基礎元件子產品

右鍵點選工程名 , 在彈出的菜單中選擇 " New / Module " 選項 ,

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

選擇建立 " Android Library " 類型的 Module 子產品 , 作為 基礎子產品 ;

【Android Gradle 插件】元件化中的 Gradle 建構腳本實作 ① ( 元件化簡介 | 建立元件化應用 | 依賴庫子產品 / 應用子產品 切換設定 )

三、依賴庫子產品 / 應用子產品 切換設定

在 Gradle 建構腳本中 , 需要實作如下兩個功能 :

  • build.gradle 建構腳本切換設定
  • AndroidManifest.xml 清單檔案切換設定

1、build.gradle 建構腳本切換設定

應用子產品 ( " Phone & Tablet " 類型的 Module 子產品 ) 是 無法設定為依賴庫的

plugins {
    id 'com.android.application'
}      

修改為 :

plugins {
    id 'com.android.library'
}      

同時去掉 " android#defaultConfig " 腳本塊 中的 applicationId 配置 ,

android {
    defaultConfig {
        //applicationId "kim.hsl.componentization"
    }
}      

此時 , 再次 Sync 同步 Gradle 建構 , 該子產品就會變為 依賴庫子產品 ( " Android Library " 類型的 Module 子產品 ) ;

此時這個 依賴庫子產品 才可以作為依賴庫使用 ;

2、AndroidManifest.xml 清單檔案切換設定

  • 應用子產品 ( " Phone & Tablet " 類型的 Module 子產品 ) : 必須有啟動 Activity ;
  • 依賴庫子產品 ( " Android Library " 類型的 Module 子產品 ) : 不能有啟動 Activity ;