Android 组件化

Android AutoService 组件化(2),安卓开发项目源代码 ② 添加 Javapoet 常用 api//Kotlin 需要kapt支持//kapt插件、会有很多问题、博客地址:https://www.jianshu.com/p/b58d733bc54eapply③ 使用 @AutoService 注解//第一步 创建下沉接口}// 第二步 实现接口}// 第三步 查找实例、进行通信// AutoService工具类找实现.apply {funtry {以上就完成了 组件化的初步构建,结构如下图3. WebView 组件封装。 阅读详情

一、组件化使用的原因及好处

原因

1、实际业务变化非常快,但是单一工程的业务模块耦合度太高,牵一发而动全身; 

2、对工程所做的任何修改都必须要编译整个工程; 

3、功能测试和系统测试每次都要进行

4、团队协同开发存在较多的冲突.不得不花费更多的时间去沟通和协调,并且在开发过程中,任何一位成员没办法专注于自己的功能点,影响开发效率; 

5、不能灵活的对业务模块进行配置和组装;

好处

1、加快业务迭代速度,各个业务模块组件更加独立,不再出现业务耦合情况; 

2、稳定的公共模块采用依赖库方式,提供给各个业务线使用,减少重复开发和维护工作量; 

3、迭代频繁的业务模块采用组件方式,各业务研发可以互不干扰、提升协作效率,并控制产品质量;

4、为新业务随时集成提供了基础,所有业务可上可下,灵活多变;

5、降低团队成员熟悉项目的成本,降低项目的维护难度; 

6、加快编译速度,提高开发效率; 

7、控制代码权限,将代码的权限细分到更小的粒度;

二、实现流程

1、组件模式与集成模式转换

AndroidStudio的Module主要有两种属性:application和library
apply plugin: ‘com.android.application’  --可独立运行的独立进程
apply plugin: ‘com.android.library’      --可被主项目依赖的组件,不可独立运行

属性是在build.gradle中配置的,为了方便切换组件模式与集成模式可在gradle.properties中配置一个全局属性:
`

  • 每次更改“isModule”的值后,需要点击 “sync project” 按钮进行同步
  • isModule=false

然后在module的build.gradle中引用:

if (isModule.toBoolean()) {
	apply plugin: 'com.android.application'
} else {
	apply plugin: 'com.android.library'
}

这样就可以做到一次改变处处生效

2、组件中AndroidManifest.xml合并问题

Android中每个Module都有一个AndroidManifest.xml文件,但是组件模式与集成模式的
AndroidManifest.xml不同,这就需要我们根据不同的模式来配置不同的AndroidManifest.xml文件。

集成模式下的清单文件:

<application android:theme="@style/AppTheme">
    <activity
	    android:name=".MainActivity"
	    android:screenOrientation="portrait" />
    <activity android:name=".BookActivity" />
</application>

组件模式下的清单文件:

<application
    android:name=".debug.ComponentApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

所以我们可以在main文件夹下创建module文件夹,并在文件夹下创建一个AndroidManifest.xml文件。然后在build.gradle中配置:

sourceSets {
    main {
        if (isModule.toBoolean()) {
            manifest.srcFile 'src/main/module/AndroidManifest.xml'
        } else {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            //集成模式下排除debug文件夹中的所有文件
            java {
                exclude 'debug/**'
            }
        }
    }
}

3、组建模式下需要用到的一些文件

一个应用只需要有一个Application,但是在组件开发模式下,组件要有自己的Application,这时,就可以在Java文件夹下创建一个文件夹(如:debug)来存放Application。在build.gradle文件中配置集成模式下排除debug文件夹中的所有文件。
在组件化开发中需要有一个Common组件,用来存放所有组件都要用到的一些工具类、依赖、BaseApplication等。

4、组件之间的调用和通信

所有组件包括壳工程都会依赖Common组件,壳工程会依赖其它所有组件。但是组件之间是不会相互依赖的,组件也不会依赖壳工程的。这样它们之间如何进行页面跳转呢?

通过路由,这里用的是阿里的ARouter:https://github.com/alibaba/ARouter

ps:示例代码

Android组件化开发 https://www.cnblogs.com/ldq2016/p/9073105.html 一.是什么 二.为什么 三.怎么做 阅读详情

相关推荐

告别编译报错!STC32G12K128在Keil C251下的完整Target配置指南(附ROM设置详解)

本文详细介绍了STC32G12K128在Keil C251下的完整Target配置指南,包括ROM设置、CPU模式选择、内存模型优化等关键步骤。通过实战技巧和常见错误解决方案,帮助开发者高效搭建编译环境,避免常见报错,充分发挥STC32G系列芯片的性能优势。

weixin_29186249的博客 339

Android 动态更换app图标

1.图标设置 app图标一般都是设置在Android manifest.xml文件里application的icon属性里,如下: Android manifest.xml: <application android:icon="mipmap/ic_launcher" ……> 淘宝、微博都有默认图标,但是到了重大节日或者有重要活动的时候,它们的图标会相应的发生改变,这是怎么做到的呢? 2.动态改变图标 实现的关键是使用activity-alias,配置多个相.....

zenmela2011的专栏 6960

SRAM compiler中Power Gating与Retention的实战配置指南

本文深入解析了在SRAM compiler中配置Power Gating(电源门控)与Retention(数据保持)功能的实战指南。针对低功耗芯片设计,文章详细阐述了如何根据应用场景(如移动AP、IoT设备)权衡开关类型、尺寸、唤醒时序以及保持电压,以实现静态功耗优化与数据可靠性的最佳平衡,并强调了后端实现与签核检查的关键要点。

weixin_29204121的博客 294

android如何设置图标,Android APP如何设置显示图标

一款APP的图标是它的脸面,颜值的重要性,不言而喻了。接下来,如何设置APP的图标?步骤1.编辑 AndroidManifest.xml:package="test.application"android:versionCode="1"android:versionName="1.0">android:icon="@drawable/icon"android:label="@string/a...

weixin_36280317的博客 5271

VMvare 桥接模式无法联网、没有未桥接的主机网络适配器,无法将网络更改为桥接状态。

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!战项目源码讲义》点击传送门即可获取!**

q16974058的博客 4330

低功耗蓝牙技术 > GAP和GATT介绍

GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,通信是双向的,不同于GAP的单向通信。

DL_62532的专栏 4030

Android 动态切换应用图标方案

经常听到大家讨论类似的需求,怀疑大厂是不是用了此方案,据我个人了解,多数头部 app 其实都是发版来更新节假日的 icon。当然本方案也是一种可选的方案,以前我也调研过,存在问题和作者所述差不多,此外原文链接作者也回复了很多疑问,可以同时了解。

金戈鐡馬 5577

ansys license许可证问题:Ansys License Manager Release 2024 R1...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 5367

Android 应用Icon快捷(shortcut)功能的详解(一)

快捷方式可帮助用户快速访问您的应用的某些部分,从而为他们呈现特定类型的内容如何以快捷方式来呈现内容取决于您的用例,以及快捷方式的上下文是属于应用驱动型还是用户驱动型。虽然静态快捷方式的上下文不会更改,而动态快捷方式的上下文会不断变化,但这两种情况下的上下文都由您的应用驱动。如果用户选择了希望应用以哪种方式(例如使用固定快捷方式)向其呈现内容,则此时的上下文是由用户定义的。以下场景展示了各类快捷方式的一些用例:静态快捷方式最适合在用户与应用互动的整个生命周期内使用一致结构链接到内容的应用。

5529

Roboguide与TIA V16通讯

Roboguide与TIA V16通讯

haier123888的博客 2674

机器学习势能(MLPs) 第一章 基础理论与核心概念 第二章 数据生成与训练集构建

密度泛函理论(DFT)作为现代计算材料科学的基石,通过求解Kohn-Sham方程在电子结构层面提供可靠的势能面信息。然而,其计算复杂度随体系电子数呈O(N3) 至O(N4) 增长,对于包含数百个原子的体系,单点计算往往需消耗数小时至数天的计算资源。这一瓶颈严重限制了分子动力学模拟的时间尺度,传统DFT-MD通常仅能覆盖皮秒量级,远不足以观测扩散、相变等慢动力学过程。经验力场通过解析函数形式描述原子间相互作用,实现了经典力学的计算效率,但其参数化过程高度依赖物理直觉与经验调参。

VectorShift的博客 182

[Android]修改应用包名、名称、版本号、Icon、启动页以及环境判断和打包

修改包名 修改应用名称 修改应用版本号 修改Icon 判断是Debug还是Release环境? 打包apk

Gamin 3万+

CVAEGAN实现锂离子电池EIS数据增强:基于健康状态的阻抗谱生成

本文提出了一种基于CVAEGAN的锂离子电池EIS数据增强方法。该方法结合了变分自编码器和生成对抗网络的优点,能够根据指定的健康状态(SoH)生成高质量的EIS阻抗谱数据。文章详细介绍了数据预处理流程、模型架构设计(包括编码器、解码器和判别器),并提供了完整的PyTorch实现代码。通过条件生成的方式,该方法可以有效解决电池健康评估中标注数据不足的问题,为基于数据驱动的电池诊断提供更丰富的训练样本。实验结果表明,生成的EIS数据具有良好的真实性和多样性,可用于增强电池健康状态评估模型的性能。

huanghm88的专栏 497

android组件化混淆,CC-安卓组件化框架

软件简介CC : ComponentCaller (使用简单但功能强大的安卓组件化框架)模块CCAutoRegister最新版本[![](https://api.bintray.com/packages/hellobilly/android/cc/images/download.svg)](https://bintray.com/hellobilly/android/cc/_latestVersi...

weixin_28976057的博客 425

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android组件化开发之一:为什么要进行组件化开发

问题4、内部项目没有一个统一的快速开发框架,每个项目采用的技术实现方式都不一样,每个开发人员的编码风格也不一致,导致每开发一个新项目都要重新编码、重复造轮子,而且也造成了开发人员在项目之间的流动困难。问题3、开发和调测一个业务功能的时候,需要整体编译APP,由于代码量越大,编译速度会相应地变慢,导致一个简单功能的的修改可能就要花费几分钟的时间编译整个APP,极大地影响开发效率。问题2、工程师需要了解各个业务的功能,避免代码的改动而影响其它的业务功能,势必无形中增加了项目维护的成本。

2401_87029792的博客 1371

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android 组件化面试必备,安卓面试问题和答案

通过ARouter在module间共享对象,实现module间通信。 比如:我们有一个账号模块 business:account ,提供了登录、登出、用户信息查询等业务。 同级的其他模块,如何跟账号模块通信?获取用户的登录状态以及用户相关信息? public class AccountBean { private String name; private int age; //… } public interface IAccountService extends IProvider { void

m0_65145113的博客 735

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓组件化开发之旅

安卓组件化 1介绍 组件化的由来: 随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一工程下的APP架构势必会影响开发效率,增加项目的维护成本,每个工程师都要熟悉如此之多的代码,将很难进行多人协作开发,而且Android项目在编译代码的时候电脑会非常卡,又因为单一工程下代码耦合严重,每修改一...

wyjlovecr7的博客 1370

Android组件化和插件化开发,安卓开发毕业设计题目

*要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。Android架构视频+BAT面试专题PDF+学习笔记即可获取!Android架构视频+BAT面试专题PDF+学习笔记即可获取!

m0_61549953的博客 953

Android组件化开发简单示例

一、组件化初始模型 1、通过一个简单的android项目初始架构图来了解组件化,如下图: 打个生动的比喻,把我们的APP当成一个电脑主机,那么app外壳就是主机外壳,main组件就是主板,其他各个组件就类似于硬盘、网卡、显卡之类的东西,各个组件连接到主板上,然后再安装到主机壳中,对外展示为一个完整的电脑主机。 2、app外壳和main组件是我们app的必备组成部分,一起构成了可对外发布的完整app,其他组件可以集成进来,也可以不集成进来,只会增加或者减少我们app的功能,但不影响我们app的最终.

美奇软件开发工作室 8473

安卓组件化学习

随APP的不断更新,代码也逐渐复杂,开发效率下降,单一工程下代码耦合严重,当需要调试的时候非常耗时,单独修改一个模块无法单独测试。组件化去除模块的耦合,使得每个模块可以独立当APP存在,对于其他模块没有直接的依赖关系。此时业务模块就成为了业务组件。而除了业务组件还有抽离出来的业务基础组件,提供业务组件使用,但不是独立的业务,例如:分享组件,广告组件;还有基础组件,即单独的基础功能,与业务无关,例如 图片加载、网络请求等。这些后面会详细说明。组件化带来的好处。

weixin_50961942的博客 952

Android 组件化○

1.组件化 组件化是指解耦复杂系统时,将多个功能模板拆分、重组的过程。在Android工程表现上就是把app按照其业务的不同,划分为不同的Module。 组件化架构的目的就是让每个业务模块变得相对独立,各个组件在组件模式下可以独立开发调试,集成模式下又可以集成到“app壳工程”中,从而得到一个具有完整功能的APP。 以美团外卖app为例: 组件化每一个组件都可以是一个APP,可以单独修改调试,而不影响总项目。 ①app壳:负责管理各个业务组件和打包APK,没有具体的业务功能; ②业务组件层:

zenmela2011的专栏 5505

什么是 Android 组件化

前言 我希望阅读本片博客的童鞋都是有一定的 Android 基础的,并且近期想实施组件化方案的.希望这篇文章能帮助到你,让你知道什么是组件化,有哪些可选的方案 什么是组件化 下面这幅图相信大家平常多多少少都能看见类似的. 最下面一层是 基础组件层, 包括但不止以下方面 存储 本地存储 数据库存储 文件存储 SP 存储 … 网络请求 实体对象 基础类 BaseActivity、BaseF...

小金子的专栏 3872

安卓一步一步搭建组件化

安卓组件化的搭建和基本功能的实现1.组件化是什么?1.1 了解组件化:1.2 组件化的基本结构:1.3 组件化的优点:2.组件化框架的搭建:2.1 第一步:搭建基础层2.1.1 创建config.gradle2.1.2 建立一个library模块作为基础层2.1.3 所有模块都要中都要添加基础层模块的依赖2.2 第二步:搭建组件层。2.2.1 为组件层模块创建不同的Manifest表单2.3 第三步:搭建app层2.4 检验搭建成果3. 组件间的activity等界面跳转3.1 ARouter介绍3.

LY010106的博客 4469

2024年安卓最新Android组件化学习,Android自学资料

这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

2401_84537826的博客 1056

Android 组件化架构概要,2024安卓面试题

我们在Project的根目录创建一个config.gradle来统筹我们的依赖和版本信息里面比较关键的还是我们配置的 IS_BUILD_MODULE 变量,如果可以设置当为true的时候,Module可以单独运行,即Application,如果为false,那么我们就只能让Module作为Library来执行,至于其他的,都是一些普通的配置。

m0_60607895的博客 753

2024年安卓最全初探 Android 组件化,四个步骤把握组件化核心要领,2024年最新面试学到了什么

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!从架构层面来说,二者的核心思想都是分而治之,都是为了提升代码的质量和可维护性,但是差别是在划分的粒度上,模块的粒度比组件的粒度高,通常情况一个模块中可能包含多个组件。来说都是一个必经的过程,随着公司的业务线拆分发展,必然会出现同样的业务模块出现多端多套代码的情况,造成很大的维护成本。

2301_82243828的博客 909
上一篇: Android DataBinding的使用
下一篇: Android NDK基础
azhoufeng
博客等级 码龄10年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值