Android模块化
一直是Android开发届一个很火的话题,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。
我们知道,模块化其实就是讲每个业务,拆分成每个独立的模块,然后通过某种协议来达到模块与模块之间的通信。
一般公司的项目的结构大概的如下:
那自己要怎么做到这个效果呢?
1.第一步
在项目根目录新建一个文件
config.gradle
内容如下:
ext {
// false 单独运行模式
// true 组建依赖模式
isComponent = true
androidConfig = [
compileSdkVersion: 28,
minSdkVersion : 19,
targetSdkVersion : 28,
versionCode : 1,
versionName : "1.0"
]
appIdConfig = [
// 这里放置,每个模块的包名
module1 : "com.xiaolei.module1"
]
appcompat_v7_version = '28.0.0'
}
2.第二步
在你的
Project
的build.gradle
里
添加这么一句
apply from: "config.gradle"
3.第三步
在你模块下的
build.gradle
里添加如下:
//配置apply
if (isComponent) {
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
// 如果你使用kotlin,那么也要在模块下添加kotlin的配置
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
//获取config文件中的配置 rootProject 项目的主对象
def config = rootProject.ext.androidConfig
def appIdConfig = rootProject.ext.appIdConfig
android {
compileSdkVersion config.compileSdkVersion
defaultConfig {
minSdkVersion config.minSdkVersion
targetSdkVersion config.targetSdkVersion
versionCode 1
versionName "1.0"
//如果moudle不是组件,意思就是单独运行模式
if (!isComponent) {
applicationId appIdConfig.module1
}
//配置BuildConfig 代码中可以调用判断moudle是否为组件
buildConfigField("boolean", "isComponent", String.valueOf(isComponent))
//配置资源文件
sourceSets {
main {
// 这里需要特别注意一下,区分两种模式,要区分两个不同的 AndroidManifest.xml
//如果是单独运行模式则配置 AndroidManifest
if (!isComponent) {
manifest.srcFile 'src/main/java/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
}
4.第四步
在你的APP的Module里配置
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
if (isComponent) {//module1 是模块化模式时才允许导入
implementation project(':module1')
}
}
独立运行时候的Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.xiaolei.module1">
<application
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/BaseTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".TestMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".Module1Activity"/>
</application>
</manifest>
组件化依赖时候的Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.xiaolei.module1">
<application>
<activity android:name=".Module1Activity"/>
</application>
</manifest>
5.第五步
看教程看到哪里少了文件了,就去哪里的文件夹里自己去新建一个吧