将模块动态配置为Application和Library
Application作为应用程序启动:apply plugin: ‘com.android.application’
Library作为库工程被引用:apply plugin: ‘com.android.library’
Application与Library切换
首先我们可以在gradle.properties中声名一个boolean类型的变量isUserModule
如下入所示:
//然后在需要动态切换的module(usercenter)的gradle中添加如下代码
if (isUserModule.toBoolean()){
apply plugin: 'com.android.library'
}else {
apply plugin: 'com.android.application'
}
两套AndroidManifest
一套用于Application时使用,配置主题及默认启动,位于debug目录
一套用于Library时使用,注册组件及权限,位于release目录
两套AndroidManifest的切换
sourceSets {
main{
if (isUserModule.toBoolean()){
manifest.srcFile 'src/main/release/AndroidManifest.xml'
//release模式下排除debug文件夹中的所有java文件
java{
exclude 'debug/**'
}
}else {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
}
}
}
debug中的AndroidManifest文件中我们需添加相应的Activity,并指定启动项,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kotlin.usercenter">
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.activity.RegisterActivity">
//作为启动项
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
release中的AndroidManifest文件中我们只需要添加相应作为Library的内容就可以,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kotlin.usercenter">
<application>
<activity android:name=".ui.activity.RegisterActivity">
</activity>
</application>
</manifest>
在我们的主模块中需要动态的判断模块的状态,用于是否引入
if (isUserModule.toBoolean()){
implementation project(path: ':usercenter')
}
配置完成后我们通过通过修改isUserModule的值并sync后Android stuido就可以帮助我们动态编译当前模块的状态(Application或者Library)