Android组件化第一步壳工程配置

949

传统项目开发中,我们都是通过集成化的方式来搭建项目的架构。什么叫做集成化,我的理解,就是整个project有一个module,根据功能的需要来创建不同的library库,通过gradle的方式来实现依赖。

什么叫做组件化,我的理解就是,一个project中,将会有多个module,并且这个module可以在需要的时候切换身份,变成library,作为主module的依赖,主 module 就是我们的壳工程。

为什么会想尝试一下组件化呢?有两个愿景:

1.在开发中,可以不用打包整个app。实现测试同学的测试包和开发人员的自测包分离

2.减少开发自测时的打包时间。

以上就是我对组件化目前的理解,对于路由那块,分篇讨论。为了解决上面愿景中的两个问题,我们可以做如下配置。

开始步骤1,2,3...

1.在项目的build.gradle中创建一个boolean变量,用来确定编译项目为集成化模式还是组件化模式。同时配置buildconfig。方便在代码中进行判断处理。

image2021-3-5_9-28-45.png

这儿说一下,gradle的引入机制,没有根据文档,只是主观推断。gradle会先从项目的build.gradle中进行读取,通过ext来定义整个工程的变量,通过apply from 来引入其他的gradle配置文件,在project中配置的功能和变量,将会在整个工程中都可以使用。

2.在要做成组件化的library中进行配置,主要是切换plugin是library还是module,以及是否在default中展示application Id,这儿有可能因为依赖的库太多,需要配置mutidex,来解决65535的问题。def用于定义子module内部的变量。

image2021-3-5_9-29-7.png

image2021-3-5_9-29-18.png

3.在依赖该library的地方,也就是主module地方,进行配置。如果是集成化的配置,也就是isRelease为true,才可以依赖,否则会在编译时产生依赖重复引入异常,无法编译通过。同时在defaultConfig里面配置buildconfig变量,方便代码中使用,进行功能切换

image2021-3-5_9-29-35.png

// 如果是集成化模式,做发布版本时。各个模块都不能独立运行了

if (isRelease) {

implementation project(':YoungWear')

}

4.配置两个AndroidManifest,作为module时候是有Application的,同时按照mutidex的配置方案配置module,接下来是一些核心的代码配置

// 配置资源路径,方便测试环境,打包不集成到正式环境

sourceSets {

main {

if (!isRelease) {

// 如果是组件化模式,需要单独运行时

manifest.srcFile 'src/main/debug/AndroidManifest.xml'else {

// 集成化模式,整个项目打包apk

manifest.srcFile 'src/main/AndroidManifest.xml'

java {

// release 时 debug 目录下文件不需要合并到主工程

exclude '**/debug/**'

}}}}

image2021-3-5_9-30-16.png

windows下,分别给project里的build.gradle赋值true和false,terminal中输入gradlew compileDebugSource --stacktrace -info ,查看是否可以编译成功,当作为module的方式,可以在AS中,看到如下图的图标正常,就证明配置成功了,直接安装apk到手机就可以了。

image2021-3-5_9-30-36.png