android架构设计组件化

Posted 码资源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android架构设计组件化相关的知识,希望对你有一定的参考价值。

先来看组件化的工程结构

从图片可以看出,主要有三个角色: 
1、主工程(壳工程mudele):主要负责事情不塞入任何具体业务逻辑,主要用于使用组合业务组件、初始化配置和发布应用配置等操作。 
2、组件(module/library):主要实现具体业务逻辑,尽可能保证业务独立性,例如现在手淘这样一个大型的app几乎每个bu功能块都能够拿出来作为一个独立业务app。但是没有这么大型也可以按照小一些的业务逻辑来区分组件,例如:购物车组件、收银台组件、用户中心组件等,具体更具自己的项目需要来划分。 
3、公共库(library):公共使用的工具类、sdk等库,例如eventbus、xutils、rxandroid、自定义工具类等等,这些库可以做成一个公共common sdk、也可以实现抽离很细按照需求依赖使用。 
他们之间的关系则是 主工程依赖组件、组件依赖公共库。

组件开发中分为两种模式一种开发测试模式、一种是发布模式: 
1、开发测试模式:这种模式下面组件应该是独立module模式,module是可以独立运行的,只要保证他对其他业务没有依赖就可以独立开发测试。 
2、发布模式:这时候组件应该library模式被主工程依赖组合,发布运行,所有业务将组合成完整app发布运行。

上面模式提出了个几个问题我们可以一一来解决; 
问题一:上面两种模式要求组件一会是module,一会是library这样切换是如何实现的? 

1.在gradle.properties中定义一个常量值 isPlugin(是否是组件开发模式,true为是,false为否)

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

3. defaultConfig {        if (isPlugin.toBoolean()){            applicationId 'com.example.rspluginmodule'        }    ....    }

4.最后还要处理AndroidManifest.xml问题,因为library、module的主配置文件是有区别的:

可以这样处理首先在main文件家中创建release文件夹然后拷贝一份AndroidManifest.xml进入release文件夹,那么发布模式下使用的就是release文件夹下面的AndroidManifest.xml,而开发模式下用的就是默认的AndroidManifest.xml,这样就要对release文件夹下面的AndroidManifest.xml进行修改因为开发模式下release文件夹下面是用来给library使用的。

修改内容release文件夹AndroidManifest.xml内容为:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="com.example.rspluginmodule">    .........    <application>        <activity            android:name="com.example.rspluginmodule.RSPluginTestActivity"            android:exported="false"            android:screenOrientation="portrait">            <intent-filter>                <data                    android:host="sijienet"                    android:path="/plugin_uri_path"                    android:scheme="app_schem" />                <action android:name="cn.com.bailian.plugin.VIEW_ACTION" />                <category android:name="android.intent.category.DEFAULT" />            </intent-filter>        </activity>    ........    </application></manifest>

5.  sourceSets {        main {            if (isPlugin.toBoolean()){                manifest.srcFile 'src/main/AndroidManifest.xml'            }else {                manifest.srcFile 'src/main/release/AndroidManifest.xml'            }        }    }

问题二:业务之间跳转如何进行,组件数据间的数据互通如何实现? 

ARouter,EventBus等工具的使用



以上是关于android架构设计组件化的主要内容,如果未能解决你的问题,请参考以下文章

Android 架构设计:三方框架推荐

android架构设计组件化

Android架构设计之插件化组件化

企业级Android应用架构设计与开发 完整版

Android组件化框架设计与实践

Android 组件化架构设计从原理到实战!