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架构设计组件化的主要内容,如果未能解决你的问题,请参考以下文章