Android 组件化

来源:互联网 发布:js怎么设置left值 编辑:程序博客网 时间:2024/06/09 21:20

场景:

公司业务扩大,业务拆分。团队已业务划分。就会遇到开发并行的问题。在中情况下可以使用业务组件化

技术:

组件化的基本就是通过 gradle 脚本来做的

实现

通过在需要组件化的业务 module 中:   
if (isDebug.toBoolean()) {    apply plugin: 'com.android.application'} else {    apply plugin: 'com.android.library'}

并在业务 module 中放一个 gradle.properties

isDebug=false

如此,当我们设置 isDebug 为 true 时,则这个 module 将会作为 application module 编译为 apk,否则 为 library module 编译为 aar

Manifest

一个很常见的需求就是,当我作为独立业务运行的时候,manifest 会不同,比如会多些 activity(用来套的,或者测试调试用的),或者 application 不同,总之会有些细微的差别。

一个简单的做法是:

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

这样在编译时使用两个 manifest,但是这样一来,两者就有很多重复的内容,会有维护、比较的成本。

我们可以利用自带 flavor manifest merge,分别对应 debug/AndroidManifest.xml, main/AndroidManifest.xml, 以及 release/AndroidManifest.xml。

main 下的 manifest 写通用的东西,另外 2 个分别写各自独立的,通常 release 的 manifest 只是一个空的 application 标签,而 debug 的会有 application 和调试用的 activity(你总得要有个启动 activity 吧)及权限。

这里有一个小 tip,就是在 release 的 manifest 中,application 标签下尽量不要放任何东西,只是占个位,让上面去 merge,否则比如一个 module supportsRtl 设置为了 true,另一个 module 设置为了 false,就不得不去做 override 了。

和main同级下有一个debug和release目录,在用命令行gradle assembleDebug 就会把main中的manifest和debug中的manifest合并。

当debug的时候就会使用debug的manifest中的activity作为入口启动,这样在开发的时候只需要在当前模块编译开发即可。

release的时候module就是library了,而入口就是app。


`

1 0