Android模块化
一直是Android开发届一个很火的话题,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。
我们知道,模块化其实就是讲每个业务,拆分成每个独立的模块,然后通过某种协议来达到模块与模块之间的通信。
一般公司的项目的结构大概的如下:

那自己要怎么做到这个效果呢?
1.第一步
在项目根目录新建一个文件
config.gradle

内容如下:
1ext { 2 // false 单独运行模式 3 // true 组建依赖模式 4 isComponent = true 5 androidConfig = [ 6 compileSdkVersion: 28, 7 minSdkVersion : 19, 8 targetSdkVersion : 28, 9 versionCode : 1, 10 versionName : "1.0" 11 ] 12 appIdConfig = [ 13 // 这里放置,每个模块的包名 14 module1 : "com.xiaolei.module1" 15 ] 16 appcompat_v7_version = '28.0.0' 17}
2.第二步
在你的
Project的build.gradle里

添加这么一句
apply from: "config.gradle"
3.第三步
在你模块下的
build.gradle里添加如下:
1//配置apply 2if (isComponent) { 3 apply plugin: 'com.android.library' 4} else { 5 apply plugin: 'com.android.application' 6} 7// 如果你使用kotlin,那么也要在模块下添加kotlin的配置 8apply plugin: 'kotlin-android' 9apply plugin: 'kotlin-android-extensions' 10 11//获取config文件中的配置 rootProject 项目的主对象 12def config = rootProject.ext.androidConfig 13def appIdConfig = rootProject.ext.appIdConfig 14 15android { 16 compileSdkVersion config.compileSdkVersion 17 defaultConfig { 18 minSdkVersion config.minSdkVersion 19 targetSdkVersion config.targetSdkVersion 20 versionCode 1 21 versionName "1.0" 22 23 //如果moudle不是组件,意思就是单独运行模式 24 if (!isComponent) { 25 applicationId appIdConfig.module1 26 } 27 28 //配置BuildConfig 代码中可以调用判断moudle是否为组件 29 buildConfigField("boolean", "isComponent", String.valueOf(isComponent)) 30 //配置资源文件 31 sourceSets { 32 main { 33// 这里需要特别注意一下,区分两种模式,要区分两个不同的 AndroidManifest.xml 34 //如果是单独运行模式则配置 AndroidManifest 35 if (!isComponent) { 36 manifest.srcFile 'src/main/java/AndroidManifest.xml' 37 } else { 38 manifest.srcFile 'src/main/AndroidManifest.xml' 39 } 40 } 41 } 42 } 43}
4.第四步
在你的APP的Module里配置
1dependencies { 2 implementation fileTree(include: ['*.jar'], dir: 'libs') 3 if (isComponent) {//module1 是模块化模式时才允许导入 4 implementation project(':module1') 5 } 6}
独立运行时候的Manifest
1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 package="com.xiaolei.module1"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/BaseTheme" 12 tools:ignore="GoogleAppIndexingWarning"> 13 <activity android:name=".TestMainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN"/> 16 <category android:name="android.intent.category.LAUNCHER"/> 17 </intent-filter> 18 </activity> 19 <activity android:name=".Module1Activity"/> 20 </application> 21 22</manifest> 23
组件化依赖时候的Manifest
1<manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 package="com.xiaolei.module1"> 4 5 <application> 6 <activity android:name=".Module1Activity"/> 7 </application> 8</manifest> 9
5.第五步
看教程看到哪里少了文件了,就去哪里的文件夹里自己去新建一个吧


