Android组件化、模块化、Catalogs

news2024/11/29 12:52:34

前言

下载代码-----》码云下载
下载代码-----》github下载
本篇是Android最新的依赖架构设计,gradle版本要8.0以上,代码实现基于8.5.1。好多年开发过程中,我们碰到config.gradle,buildSrc,composing builds等依赖编译管理,目的在对引入库依赖可以统一版本,做到组件化(业务拆分可单独编译),模块化(功能库拆分解耦复用),单独编译测试业务组件打包apk。

直接说这次Catalogs依赖构建带来什么好处,gradle8后完全可用kotlin进行脚本kts的编写,gradle脚本直接用kotlin写,版本统一依赖。以简化插件代码方式插入各个库的build.gradle,精简写法,自由限制引入库。一次写完业务库后,就不需要再改代码也可以独立运行apk。

依赖构建目的

  • 统一修改相关sdk依赖的版本号
  • 统一 自动添加Library/module的依赖库,不需要写太多重复的脚本代码
  • 依赖结构清晰,coreLib包括所有功能模块,apkBuild包括所有独立编译的业务组件,不需要修改代码去达到独立编译apk,容易出错
  • 组件间可自由通信,这里没用外部sdk,因为组件通信 其实就是接口数据的回调,要明白后其实写法很简单,就少了类似Arouter的IProvider的拦截等,可关注coreLib/bridge
  • 各个组件可完成内部的Application创建时的sdk初始化,统一监听所有Activity的生命周期,埋点逻辑等,关注ModuleInitDelegate
  • 现阶段比Groovy的编译期构建耗时少,多少大项目打包几分钟的o(╥﹏╥)o

下为项目目录架构
project

构建的插件库

整个catalogs的重要逻辑在buildSrc插件库,但是不需要在其他module显示式的引入buildSrc,这是跟之前composingbuild的很大不同,更简单,内部实现插件代码类DefaultGradlePlugin.kt,只要库的build.gradle显示的引入该类就完成所有脚本代码的复用。苦groovy的升级语法很久了,用kotlin有多爽,不需要每次升级就不能执行task,各种报错。Dependencies类用函数的方式拆分和聚合相关的依赖库,升级版本号巨简单。
yilai

独立编译apk

大项目有上几十个libs,module几十个,单单把这些library的名字显示一屏幕都不够,所有我对他们在外包了文件夹coreLib和apkBuild,创建module时依然右键根项目,再拖动module到文件夹,然后去修改 settings.gradle文件对应的include路径。代码里除了壳app,还有业务组件登录apk-login,工具组件 apk-tools,有3个可独立编译,因为apk-login创建后移动过路径,那么点击run configuration删除错误路径的就行。

在这里插入图片描述

关注点

这里用的滴滴的路由库,阿里的Arouter早就停止维护了,组件化很重要就是路由库,不能因为gradle的升级就无法使用,这里滴滴一直更新我用着两年都没啥问题。
里面很多依赖库都是很新的版本号,我在外网github比较多,国内的开发者基本都是低版本代码跑到底,最近360插件库更新支持7.4了,很久没更o(╥﹏╥)o,真的是3年不开张,开张吃3年。

最后

本文总结了Catalogs的Android依赖管理方式,提供源码自行学习,有好的意见提出来,我也是不停地总结探索,找适合自己的开发模式,我不太喜欢依赖注入和牛油刀,全是注解,把布局文件都打乱了。
码云下载
github下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新款任天堂switch游戏机方案,支持4K60HZ投屏方案,显示器,手柄方案

据传任天堂将推出新的一代的switch掌机,而新款掌机将支持4K60HZ投屏 都2402年了再做1080P确实有点不太象话了 4K60HZ相较于1080P能够提升很多游戏体验,这时不管是HDMI显示器或者是VR眼睛清晰度都会让人舒服很多。 不过新一代的任天堂似乎也在PD协议上…

用作曲的手法写旋律 什么是动机 ​动机扩大 单音重复 移八度

【你怎么还不会写旋律!!!猴子都听的懂的旋律教程来了!两分钟让你快速上手!】 你怎么还不会写旋律!!!猴子都听的懂的旋律教程来了!两分钟让你快速上手!_哔哩哔…

同济子豪兄--图的基本表示【斯坦福CS224W图机器学习】

无向图(Undirected Graph): 在无向图中,边没有方向,即如果顶点A和顶点B之间有一条边,那么这条边既表示A到B的关系,也表示B到A的关系。换句话说,边是双向的。无向图的边通常用一条线段…

WPF基础权限系统

一.开发环境 VisualStudio 2022NET SDK 8.0Prism 版本 8.1.97Sqlite 二. 功能介绍 WPF 基础权限系统,是一个支持前后端分离设计的 客户端(C/S)项目,该示例项目前端xaml使用UI库 ,Material Design Themes UI 来构建用户界面,确保…

Ubuntu如何显示pcl版本

终端输入: apt-cache show libpcl-dev可以看到,Ubuntu20.04,下载的pcl,应该都是1.10版本的

一次性入门三款分布式定时任务调度框架:Quartz、ElasticJob3.0、xxl-job

分布式定时任务调度框架(文末有源码) 前言1、Quartz1.1 数据库1.2 maven依赖1.3 代码实现1.3.1 创建一个job1.3.1 为job设置trigger 1.4 配置文件1.5 启动、测试1.1 单机1.2 集群 2、ElasticJob2.1 下载zk2.2 新建三个类型的作业2.3 配置文件2.4 启动项目…

Windows下配置Nginx和PHP

之前在Windows开发php项目用的是phpstudy,好用的很。但是phpstudy好久没有更新了,感觉PHP像没有人再用了一样。但是PHP拿来开发小系统,还是很高效的,今天记录如何在Windows环境下配置Nginx和PHP。 1. 配置nginx Nginx软件下载解压…

基于Springboot+Vue的宠物管理系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

实现双向链表的增删改查

头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef int LTDataType; typedef struct ListNode {LTDataType data;struct ListNode* prev;struct ListNode* next; } LTNode; //v…

QGraphics类型学习使用【Qt】【C++】

QGraphics类型学习使用 需求过程全部完整代码 首先已知&#xff0c;QGraphicsView&#xff0c;QGraphicsScene, QGraphicsItem&#xff0c;分别称为&#xff1a;视图&#xff0c;场景&#xff0c;图元&#xff0c;图表就是各种各样的元素&#xff0c;图片元素&#xff0c;线条元…

react18中在列表项中如何使用useRef来获取每项的dom对象

在react中获取dom节点都知道用ref&#xff0c;但是在一个列表循环中&#xff0c;这样做是行不通的&#xff0c;需要做进一步的数据处理。 实现效果 需求&#xff1a;点击每张图片&#xff0c;当前图片出现在可视区域。 代码实现 .box{border: 1px solid #000;list-style: …

ParallelsDesktop20最新版本虚拟机 一键切换系统 游戏娱乐两不误

让工作生活更高效&#xff1a;Parallels Desktop 20最新版本虚拟机的神奇之处 大家好&#xff01;&#x1f44b; 今天我要跟大家安利一款让我工作效率飞升的神器——Parallels Desktop 20最新版本虚拟机。作为一个日常需要在不同操作系统间来回穿梭的人&#xff0c;这款软件简直…

react18中的计算属性及useMemo的性能优化技巧

react18里面的计算属性和使用useMemo来提升组件性能的方法 计算属性 实现效果 代码实现 函数式组件极简洁的实现&#xff0c;就这样 import { useState } from "react"; function FullName() {const [firstName, setFirstName] useState("");const [la…

OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 允许用户在给定的图像上选择多个 ROI。 该函数创建一个窗口&#xff0c;并允许用户使用鼠标来选择多个 ROI。控制方式&#xff1a;使用空格键或…

明日周刊-第23期

十月已过半&#xff0c;气温也转凉了&#xff0c;大家注意保温哦。冬吃萝卜&#xff0c;夏吃姜&#xff0c;在快要到来的冬季大家可以选择多吃点萝卜。 配图是本周末去商场抓娃娃的时候拍的照片&#xff0c;现在抓娃娃单次普遍都控制在1块钱以下了&#xff0c;还记得多年前的抓…

智能手表PPG技术原理:【图文讲解】

光体积变化描记图法&#xff08;Photoplethysmography&#xff0c;简称PPG&#xff09;是借光电手段在活体组织中监测血液容积变化的一种无创监测方法 目前智能手表比较标配的功能&#xff1a;血糖、血压、心电、心率、血氧 1&#xff1a;人体血管 先温习一下&#xff0c;人…

Java项目-基于Springboot的智慧养老平台项目(源码+文档).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、SpringClud、Vue、Mybaits Plus、ELementUI工具&…

TikTok广告账号被封?常见原因及解决方法分享

TikTok广告投放往往会给我们的账号带来高效曝光和精准流量&#xff0c;但同时许多用户也面临着一个困扰——广告账号被封禁的问题。将在此文一起商讨TikTok广告账号被封禁的原因&#xff0c;分析平台的具体规定&#xff0c;提供解决问题的应对策略&#xff0c;帮助大家有效规避…

PRCV 2024 - Day 1

2024年10月18日至10月20日&#xff0c;第七届中国模式识别与计算机视觉大会&#xff08;The 7th Chinese Conference on Pattern Recognition and Computer Vision, PRCV 2024&#xff09;在新疆乌鲁木齐的新疆国际会展中心举办&#xff0c;是国内顶级的模式识别和计算机视觉领…

专家系统简介

本文对基于规则的专家系统进行简介&#xff0c;举例专家系统的结构类似 MYCIN 系统&#xff0c;同时串联介绍专家系统的各种思想。需要注意的是&#xff0c;本文所述仅是专家系统的一种实现途径&#xff0c;其依赖规则进行知识表示和推理&#xff0c;另外还有基于语义网络、框架…