GitHub 地址 : https://github.com/han1202012/Componentization
在 组件化专栏 中 , 详细介绍了组件化的实现 , 本系列博客继续对组件化中 Gradle 构建过程 进行优化 ;
Android 应用常用架构 :
组件化开发中 , 一般将应用划分为若干模块 , 如分层结构 :
特别注意 : 创建 依赖库模块 / 应用模块 互相切换的模块 , 建议创建时创建为 应用模块 , 因为依赖库模块比应用模块少很多文件 , 都需要自己补齐 ;
分层结构 , 可以很好的避免 , 代码全部写在一个模块中 , 一撸到底 , 一般单人开发的时候很容易这么干 ;
GitHub 地址 : https://github.com/han1202012/Componentization
在 " 应用壳模块 " 中 , 只实现 自定义 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 作为启动页使用 ;
右键点击工程名 , 在弹出的菜单中选择 " New / Module " 选项 ,
选择创建 " Phone & Tablet " 类型的 Module 模块 , 作为 业务组件模块 ;
选择默认的空白界面 ;
选择默认的 Activity ;
右键点击工程名 , 在弹出的菜单中选择 " New / Module " 选项 ,
选择创建 " Phone & Tablet " 类型的 Module 模块 , 作为 功能组件模块 ;
选择默认的空白界面 ;
选择默认的 Activity ;
右键点击工程名 , 在弹出的菜单中选择 " New / Module " 选项 ,
选择创建 " Android Library " 类型的 Module 模块 , 作为 基础模块 ;
在 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 模块 ) ;
此时这个 依赖库模块 才可以作为依赖库使用 ;
在 AndroidManifest.xml 清单文件中 ,
否则一旦多个模块合并 , 会出现 多个启动 Activity , 肯定会出现问题 ;