梳理《android组件化方案》博客大致思路

      今天看了《android组件化方案》这篇博客感觉对组件化的了解大大提升,先把链接给出“android组件化方案”,大家不想看我比比的,可以去看原文,想看我的个人浅显的理解的也欢迎。

      组件化,个人理解有点像赛亚人合体一样。大部分都是一个独立的个体,组在一起就是一个更厉害的赛亚人,也有的部分就像合体的条件,虽然单独不能成为一个独立的个体,但是也是不可或缺的。android的组件化分为三部分:1,业务组件 2,功能组件 3,APK壳工程。 业务组件故名思意就是app的业务流程部分;功能组件就是业务组件通用的一些依赖库,例如:网络请求库的封装,刷新功能库,日志库等待;APK壳工程就是只有一个外壳的,把各个业务组件和功能组件组合起来的工程项目。

  

   在业务组件组合程apk之前,每个业务组件都是可以单独运行的,因此每个组合之前都是工程不是依赖库。要控制它们是依赖库还是工程项目是可以通过build.gradle中更改apply plugin。

1、application属性,可以独立运行的Android程序,也就是我们的APP;

apply plugin: ‘com.android.application’
  • 1

2、library属性,不可以独立运行,一般是Android程序依赖的库文件;

apply plugin: ‘com.android.library’

   因为如果业务组件很多,手工配置很麻烦可以通过配置APK壳工程的根目录的gradle.properties(只能设置String常量),设置一个String常量来控制是否是依赖库还是工程。每次更改这个值都需要点击“sync project”按钮。

   业务组件,功能组件,apk壳合并为一个app需要解决几个问题:

   1,Androidmanifest的冲突问题

       因为业务组件平常是一个单元可以运行,因此是需要一个完整的Androidmanifest,但是等它合并之后又不需要了。因此我们需要能够控制androidmanifest。那我们能够控制吗?答案是必然的!我们可以在build.gradle中指定用那个androidmanifest。既然如此我们就可以创建两个androidmanifest,然后通过判断是否组合的String常量来控制使用那个。

例如:

sourceSets {
        main {
            if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }

library的androidmanifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.guiying.girls">

    <application android:theme="@style/AppTheme">
        <activity
            android:name=".main.GirlsActivity"
            android:screenOrientation="portrait" />
        <activity
            android:name=".girl.GirlActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme.NoActionBar" />
    </application>

</manifest>

没有权限申请,app名称、图标,启动activity

2.一些数据和通用数据的获取问题

   因为业务组件是单独的个体,所以像登录界面就只有一个组件有,那其他组件就不用登录了吗?肯定不是的,因为网络请求是需要TOKEN和其他数据的,但是token一般只有登录后才会返回。在这里,我们可以在Application中初始化一些数据(token,context等)。同样为了防止合并的时候application冲突,需要把application去掉。可以在Java目录下创建一个文件夹如debug,然后把application放进去,最后在build.gradle中通过代码去掉这个文件夹。

   if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
                //集成开发模式下排除debug文件夹中的所有Java文件
                java {
                    exclude 'debug/**'
                }
            }
3.library的冲突问题

我们还是要考虑另一个情况,我们在build.gradle中compile的第三方库,例如AndroidSupport库经常会被一些开源的控件所依赖,而我们自己一定也会compile AndroidSupport库 ,这就会造成第三方包和我们自己的包存在重复加载,解决办法就是找出那个多出来的库,并将多出来的库给排除掉,而且Gradle也是支持这样做的,分别有两种方式:根据组件名排除或者根据包名排除,下面以排除support-v4库为例:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile("com.jude:easyrecyclerview:$rootProject.easyRecyclerVersion") {
        exclude module: 'support-v4'//根据组件名排除
        exclude group: 'android.support.v4'//根据包名排除
    }
}

4.组件间的跳转和通信

跳转可以通过第三方框架,阿里巴巴的ARouter  或者 ActivityRouter ,通信可以通过Eventbus或者广播

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值