该分支基于 TheRouter 框架实现组件化路由导航,多 core lib 实现基础核心开发库
🍋 这是一个 Android 组件化模板项目,通过在此基础上开发项目,使其拥有组件化能力。
Android 规范 、 Java 规范 、 Git 规范
Android 组件化就是利用多个 Module 来表示应用的多个模块实现代码和资源的隔离,并且每个 Module 都有单独运行和组合的能力。
该 Android 项目组件化示例代码 100% Kotlin 实现,使用 ARouter 方案实现组件化, 整个项目基于 Android JetPack 组件库 + Kotlin 等最新技术栈进行开发, 使用 MVVM 架构 ( DataBinding + ViewModel + Lifecycle )
名词 | 含义 |
---|---|
集成模式 | 所有的业务组件被 APP 壳工程依赖,组成一个完整的 APP |
APP 壳工程 | 基本上是一个空壳,用于集成所有的功能组件,统一编译,用于输出组中的 APK |
lib_XXX | 抽离的一个库模块,功能具有通用性,属于公共基础组件 |
module_XXX | 根据业务分出来的能独立运行的业务组件,即可以单独运行,又可以库的形式集成到 APP 壳中,比如 Main 组件、购物车组件、聊天组件、订单组件等。 |
core | core 是项目的基础,提供最基础的、与具体业务无关的功能,比如网络请求、通用 UI 组件、core 还负责集成功能的 Library 库 ( 当中也有一些业务相关的、各模块共享的功能,这是不可避免的 ) |
- component | 根目录
- core | 核心基础整合库
- libs | 通用 Library、第三方库 clone 差异化修改
该目录属于核心基础库代码,整个组件化项目基于该基础上进行开发
该 Core Module 基于 Dev 系列开发库 搭建, ( 全部开发基于该 module ) 用于统一维护基础核心开发库、第三方库依赖,对外只需要依赖该 module 便可使用整个核心模块 ( core 文件以及内部所有 libs )
- core | 根目录
- core | 核心基础整合库 ( 内部集成 core libs, 对外依赖该 module 即可 )
- core_base_lib | 基础核心开发库依赖 ( libs 便捷依赖统一维护 )
- libs | 具体功能拆分, 封装 lib
- lib_base | 基类相关 ( Activity、Application 等 )
- lib_base_split | 基础 ( 基类等 ) lib 拆包
- lib_bean | 通用实体类 ( module 实体类下沉 )
- lib_channel_flavors | App 多渠道
- lib_config | 通用配置、常量信息
- lib_debug_assist | Debug 编译辅助开发库 ( 提供切换环境、抓包数据可视化、调试按钮开关等辅助功能 )
- lib_engine | 通用 Engine ( 图片加载、日志、JSON、权限、资源选择、缓存 ) lib
- lib_environment | 通用环境配置切换库
- lib_language | 通用多语言 lib
- lib_mvvm | MVVM 通用代码封装 ( 使用 MVVM module 必须 api 依赖如果使用 compileOnly 将会找不到 BindingAdapter 等 )
- lib_network | 网络相关 lib ( 网络请求、上传下载 )
- lib_property | 性能优化、检测 lib
- lib_receiver | 广播监听 ( 如网络状态、电量、屏幕解锁 ) 相关
- lib_router | 路由相关
- lib_ui | 统一 style、widget、ui 相关组件
- lib_ui_skin | APP 主题、换肤相关控制
- lib_upload | 通用上传库
- lib_utils | 通用工具库
- lib_web | WebView 相关
该目录属于 项目模块快捷工具封装复用、第三方库 clone 对源码进行差异化修改使用等存储目录
- libs | 根目录
- lib_splash_ads | 启动页广告 lib
- lib_tmdb_ui | TheMovieDB 通用 UI lib
- application | 根目录
- app | 主体应用 ( APP 壳工程 )
- module | 具体功能模块 ( 可单独运行 ),被主体应用 ( 壳 ) 所依赖使用
该目录下的 Module 在 isModular=true
的情况下,都属于独立的应用可单独运行,为 false
则都属于功能模块,被主体应用 ( 壳 ) 所依赖使用
- module | 根目录
- module_main | 首页 Module
- module_movie | 电影 Module
- module_person | 人物 Module
- module_splash | 启动页 ( 广告页、首次启动引导页 ) Module
- module_template | 模板 Module ( 便于 copy )
- module_tv | 剧集 Module
基础组件中的 core 模块是基础架构库,提供可扩展性强低侵入性的通用功能:
其中 lib_engine 组件支持通用 Engine ( 图片加载、日志、JSON、权限、资源选择、缓存等 ) 进行自行实现,无缝全局替换第三方库实现方案
整体上,架构设计采用的是模块化组件化架构。
在 Android 中如何实施组件化?
Android Studio 使用 gradle 进行项目构建,gradle 使得我们可以像编程一样控制构建过程,当一个模块应用 application 插件时,它将被构建为 apk,当一个模块应用 library 插件时, 它将被构建为 aar,这正是我们进行组件化的利器,通过各种配置达到一键切换整体编译集成还是各个组件独立编译允许的目的。从而大大的提高开发效率。当然既然是可以编程的, 我们可以自定义一个 Gradle 插件,实现灵活的项目构建配置。
主要技术点为在 modular.gradle 中定义标识
// 模块化编译开关 ( true = 每个模块都是独立应用, false = 整合运行 )
isModular = false
根据标识,应用不同的构建文件。
def isModular = isModular.toBoolean()
if (isModular) { // 每个模块都是独立应用
apply from: rootProject.file(files.build_application_gradle)
} else { // 整合运行, 每个 module 都是 library
apply from: rootProject.file(files.build_library_module_gradle)
}
经过组件化后,组件之间在物理上被隔离,组件间彼此不感知对方的存在,但是在业务上组件间又有通信的需求, 业界主流采用的方案是采用路由通信。项目将会采用阿里巴巴开源的 ARouter 通信通信方案。
config.gradle :主要存储第三方库版本信息等
versions.gradle :构建信息以及 core 库版本配置
modular.gradle :组件化配置以及各个 Module 版本信息
关于 core 库依赖可以参考 MavenCentral Links - 搭建自己的 Maven 库 搭建自己的 Maven 库,通过 aar 直接进行依赖
调试工具:
Copyright 2022 afkT
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.