天天看点

【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 ;