模块化开发步骤 + ARouter的使用 + 结合mvp结构分模块(一)

(一)分模块步骤:

1、新建模块:

New Module,选择第一个Phone,表示可以独立运行的模块

取名为模块的名字,然后configure Activity的时候要注意Activity和Layout的名字都不能有重复。

比如这里创建一个叫做login的模块,完成之后就可以看到他是可以单独运行的。

 

2、做模块的配置:

我们把他们build.gradle统一的sdk版本号和是否可单独运行的声明放到统一的gradle.peoperties文件里面(注意:主模块是一定要能单独运行的,所以这个是否可单独运行这一声明是针对新建的模块的):

#最小SDK版本
MIN_SDK_VERSION = 14
#当前SDK版本
TAR_SDK_VERSION = 28
#Android使用的SDK版本
COMPILER_SDK_VERSION = 28

#各个模块是否能单独运行
MODULE_IS_APPLICATION = true
#我用一个字段做所有模块统一管理开关,开发者可根据自己的需求,分别给模块设立独立开关

 a、然后在所有build.gradle里面修改SDK值为引用gradle.peoperties里面的这些值(注意引用值的时候需要转类型,因为这里的值是String形式的)

扫描二维码关注公众号,回复: 8498932 查看本文章
android {
    compileSdkVersion COMPILER_SDK_VERSION.toInteger()
    defaultConfig {
        ······//这个地方是applicationId,需要根据是否能独立运行做更改,待会会讲到
        minSdkVersion MIN_SDK_VERSION.toInteger()
        targetSdkVersion TAR_SDK_VERSION.toInteger()
        ······

b、SDK改完了咱们改模块是否能单独运行的配置,能独立运行的话就用原来的application,不能独立运行,他就是一个library,我们在主模块以外的build.gradle最顶部那里改一下做if判断:

if (MODULE_IS_APPLICATION.toBoolean()){
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}

c、上面遗留的applicationId问题这个地方咱也要做判断,能单独运行的时候才有applicationId,注意这个地方也是除了主模块以外的才需要改:

//单独运行才有这个applicationId
if(MODULE_IS_APPLICATION.toBoolean()){
    applicationId "com.xaehu.login"
}

d、AndroidManifest也是需要根据是否可单独运行做配置,如果可单独运行我们就用原来的,不可单独运行的时候我们需要执行另一个AndroidManifest,另一个AndroidManifest的配置待会会说到。当然,这一步也是针对主模块以外的模块:

android {
    ······
    sourceSets{
        main{
            if(MODULE_IS_APPLICATION.toBoolean()){
                //执行原来的AndroidManifest
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }else{
                //执行不可单独运行配置的另一个AndroidManifest
                manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
            }
        }
    }
    ······
}

所以abcd四步结合起来的login模块的build.gradle修改的配置如下:

if (LOGIN_IS_APPLICATION.toBoolean()){
    apply plugin: 'com.android.application'
}else {
    apply plugin: 'com.android.library'
}
android {
    compileSdkVersion COMPILER_SDK_VERSION.toInteger()
    defaultConfig {
        if(LOGIN_IS_APPLICATION.toBoolean()){
            applicationId "com.xaehu.login"
        }
        minSdkVersion MIN_SDK_VERSION.toInteger()
        targetSdkVersion TAR_SDK_VERSION.toInteger()
        ······
    }
    ······
    sourceSets{
        main{
            if(LOGIN_IS_APPLICATION.toBoolean()){
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }else{
                manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
            }
        }
    }
}

细心的同学就已经发现了,d那一步中,另一个AndroidManifest就在main下面创建一个manifest文件,再在里面创建一个新的AndroidManifest.xml文件,复制原来的AndroidManifest过来改,去掉application的属性和activity内层的元素:(这一步也是主模块以外

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xaehu.login">
    <application>
        <activity android:name=".LoginActivity">
        </activity>
    </application>
</manifest>

分布大概就是这样子:

这里需要说一下,原AndroidManifest里该有的权限都不能少,因为他有单独运行的时候,也是需要这些权限。比如联网权限

然后就是主模块的判断了,如果登录模块不可单独运行,那他就是library,我们就把它引入进来:

dependencies {
    ······
    if(!LOGIN_IS_APPLICATION.toBoolean()){
        implementation project(':login')
    }
}

模块化开发步骤 + ARouter的使用 + 结合mvp结构分模块(一) 

模块化开发步骤 + ARouter的使用 + 结合mvp结构分模块(二)

模块化开发步骤 + ARouter的使用 + 结合mvp结构分模块(三)

发布了60 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35584878/article/details/99459730
今日推荐