Android 组件化

本文深入探讨了组件化开发的原因及好处,包括加快业务迭代、稳定公共模块复用、提升协作效率、灵活集成新业务等。并通过示例详细介绍了组件模式与集成模式的转换流程,组件中AndroidManifest.xml的合并策略,组件间调用与通信的方法,以及组件化开发所需的关键文件配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、组件化使用的原因及好处

原因

1、实际业务变化非常快,但是单一工程的业务模块耦合度太高,牵一发而动全身; 

2、对工程所做的任何修改都必须要编译整个工程; 

3、功能测试和系统测试每次都要进行

4、团队协同开发存在较多的冲突.不得不花费更多的时间去沟通和协调,并且在开发过程中,任何一位成员没办法专注于自己的功能点,影响开发效率; 

5、不能灵活的对业务模块进行配置和组装;

好处

1、加快业务迭代速度,各个业务模块组件更加独立,不再出现业务耦合情况; 

2、稳定的公共模块采用依赖库方式,提供给各个业务线使用,减少重复开发和维护工作量; 

3、迭代频繁的业务模块采用组件方式,各业务研发可以互不干扰、提升协作效率,并控制产品质量;

4、为新业务随时集成提供了基础,所有业务可上可下,灵活多变;

5、降低团队成员熟悉项目的成本,降低项目的维护难度; 

6、加快编译速度,提高开发效率; 

7、控制代码权限,将代码的权限细分到更小的粒度;

二、实现流程

1、组件模式与集成模式转换

AndroidStudio的Module主要有两种属性:application和library
apply plugin: ‘com.android.application’  --可独立运行的独立进程
apply plugin: ‘com.android.library’      --可被主项目依赖的组件,不可独立运行

属性是在build.gradle中配置的,为了方便切换组件模式与集成模式可在gradle.properties中配置一个全局属性:
`

  • 每次更改“isModule”的值后,需要点击 “sync project” 按钮进行同步
  • isModule=false

然后在module的build.gradle中引用:

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

这样就可以做到一次改变处处生效

2、组件中AndroidManifest.xml合并问题

Android中每个Module都有一个AndroidManifest.xml文件,但是组件模式与集成模式的
AndroidManifest.xml不同,这就需要我们根据不同的模式来配置不同的AndroidManifest.xml文件。

集成模式下的清单文件:

<application android:theme="@style/AppTheme">
    <activity
	    android:name=".MainActivity"
	    android:screenOrientation="portrait" />
    <activity android:name=".BookActivity" />
</application>

组件模式下的清单文件:

<application
    android:name=".debug.ComponentApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

所以我们可以在main文件夹下创建module文件夹,并在文件夹下创建一个AndroidManifest.xml文件。然后在build.gradle中配置:

sourceSets {
    main {
        if (isModule.toBoolean()) {
            manifest.srcFile 'src/main/module/AndroidManifest.xml'
        } else {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            //集成模式下排除debug文件夹中的所有文件
            java {
                exclude 'debug/**'
            }
        }
    }
}

3、组建模式下需要用到的一些文件

一个应用只需要有一个Application,但是在组件开发模式下,组件要有自己的Application,这时,就可以在Java文件夹下创建一个文件夹(如:debug)来存放Application。在build.gradle文件中配置集成模式下排除debug文件夹中的所有文件。
在组件化开发中需要有一个Common组件,用来存放所有组件都要用到的一些工具类、依赖、BaseApplication等。

4、组件之间的调用和通信

所有组件包括壳工程都会依赖Common组件,壳工程会依赖其它所有组件。但是组件之间是不会相互依赖的,组件也不会依赖壳工程的。这样它们之间如何进行页面跳转呢?

通过路由,这里用的是阿里的ARouter:https://github.com/alibaba/ARouter

ps:示例代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值