(一)分模块步骤:
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形式的)
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')
}
}