Android在模块化开发中如何使各个模块(module)单独运行 - Go语言中文社区

Android在模块化开发中如何使各个模块(module)单独运行


在模块化开发中如何使各个模块(module)单独运行

在组件化还发中,为了提高开发效率,避免不必要的编译事件浪费,就不得不使单个业务模块独立运行。那如何实现呢?

Android中有源集的概念,源集很好的解决了这类需求问题:有关源集的问题可自行搜索及看我之前的文章。在这里我们用到了源集重定向。

步骤一:

在gradle.properties文件中创建一个变量runModule,如下:

#控制运行哪个模块(1:运行app模块 2:运行dataaccount模块)
runModule=2

步骤二:

在原来的app module(原始的程序入口module)中修改插件:

if (Integer.valueOf(runModule) == 1) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

接下来修改applicationId,如下:

defaultConfig {
        if (Integer.valueOf(runModule) == 1) {//当为运行module时才有applicationId属性(可以做到不同module的app能在手机上共存)
            applicationId "com.muheda.dataaccount"
        }
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

这一步的最后就是修改源集,如下:

android {
    if (Integer.valueOf(runModule) != 1) {
        sourceSets {
        // main源集(source set)的闭包配置。
            main {
            //每个源集只能有一个AndroidManifest.xml清单文件,
       //默认情况下,main源集的清单文件在src/main/ 目录中。
                manifest.srcFile 'src/other/AndroidManifest.xml'
            }
        }
    }
}

在这里插入图片描述

说明:如上图所示,这里的源集重定向用的是相对路径,因为你要配置的文件是build.gradle,以build.gradle为基准AndroidMainfest.xml的路劲就是src/other/AndroidManifest.xml。

注意在lib中要去掉默认的启动activity如下图:
在这里插入图片描述
删除选项框中的代码即可

步骤三:

配置其他Module的build.gradle文件,配置方法和步骤二类似

首先配置插件:

if (Integer.valueOf(runModule) == 2) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

然后配置applicationId

defaultConfig {
        if (Integer.valueOf(runModule) == 2) {
            applicationId "com.muheda.data"
        }
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }

最后配置源集:

android {
    if (Integer.valueOf(runModule) == 2) {
        sourceSets {
            main {
            // 变更Java 的源文件夹,默认的文件夹 = 'src/main/java'.
                java.srcDirs = ['src/other/java']
                //如果像以下方式一样,列出来多个文件夹,那么Gradle使用所有的这些文件夹来加载资源,
       //并赋予这些文件夹相同的优先级。如果不同的文件夹中定义了相同的资源,那么会产生资源合并错误。
       //默认的资源文件夹是 'src/main/res'.
                res.srcDirs = ['src/other/res']
                //每个源集只能有一个AndroidManifest.xml清单文件,
       //默认情况下,main源集的清单文件在src/main/ 目录中。
                manifest.srcFile 'src/other/AndroidManifest.xml'
            }
        }
    }
}

到此为止大功告成,总体来说配置过程不是很麻烦。接下来只要修改gradle.properties文件中runModule的值就可以自由切换了。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013049016/article/details/91981160
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 22:09:31
  • 阅读 ( 982 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢