将模块动态配置为Application和Library

将模块动态配置为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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值