Android模块化初体验及教程

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.第二步

在你的 Projectbuild.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.第五步

看教程看到哪里少了文件了,就去哪里的文件夹里自己去新建一个吧

转载于:https://my.oschina.net/xiaolei123/blog/2993011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值