当前位置: 首页 > news >正文

上海注册公司注册在哪里比较好关键词的分类和优化

上海注册公司注册在哪里比较好,关键词的分类和优化,vi视觉识别系统,锦州做网站组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试。 先来一张效果图 组件化初衷 APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂…

组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试。

先来一张效果图

img

组件化初衷

  • APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,维护成本高。
  • 业务耦合度高,代码越来越臃肿,团队内部多人协作开发困难。
  • Android项目在编译代码的时候电脑会非常卡,又因为单一工程下代码耦合严重,每修改一处代码后都要重新编译打包测试,导致非常耗时。
  • 方便单元测试,改动单独一个业务模块,不需要着重于关注其他模块被影响。

什么是组件化

组件化就是将一个app分成多个Module,如下图,每个Module都是一个组件(也可以是一个基础库供组件依赖),开发的过程中我们可以单独调试部分组件,组件间不需要互相依赖,但可以相互调用,最终发布的时候所有组件以lib的形式被主app工程依赖并打包成一个apk。

img

组件化优势

  • 组件化就是将通用模块独立出来,统一管理,以提高复用,将页面拆分为粒度更小的组件,组件内部除了包含UI实现,还包含数据层和逻辑层。
  • 每个工程都可以独立编译、加快编译速度,独立打包。
  • 每个工程内部的修改,不会影响其他工程。
  • 业务库工程可以快速拆分出来,集成到其他App中。
  • 迭代频繁的业务模块采用组件方式,业务线研发可以互不干扰、提升协作效率,并控制产品质量,加强稳定性。
  • 并行开发,团队成员只关注自己的开发的小模块,降低耦合性,后期维护方便等。

指导思想

  • 组件拆分:将一个project划分成业务组件、基础组件、路由组件。其中业务组件是相互隔离的,可以单独调试,基础组件提供业务组件所公用的功能,路由组件为业务组件之间通信提供支持。
  • 组件隔离:业务组件之间的隔离,可以单独调试。
  • 核心法则:编译期隔离,运行期按需依赖。

依赖关系

img

组件化需要考虑的问题

  • 模式切换:如何使得APP在单独调试跟整体调试自由切换
  • 资源冲突:当我们创建了多个Module的时候,如何解决相同资源文件名合并的冲突
  • 依赖关系:多个Module之间如何引用一些共同的library以及工具类
  • 组件通信:组件化之后,Module之间是相互隔离的,如何进行UI跳转以及方法调用
  • 入口参数:我们知道组件之间是有联系的,所以在单独调试的时候如何拿到其它的Module传递过来的参数

组件化后项目结构如下图

img

理论说了那么多,下面开始撸代码

实现步骤

1、全局设置Gradle,每一个业务Module需要的版本都定义在这里方便后期维护多个Module版本号

ext {// Sdk and toolsminSdkVersion = 16targetSdkVersion = 26compileSdkVersion = 26buildToolsVersion = '26.0.2'supportLibraryVersion = '26.1.0'// App dependenciesaRouter = '1.2.2'leakcanaryVersion = '1.3'glideVersion = '3.7.0'
}####每个业务Module编译依赖版本compileSdkVersion rootProject.ext.compileSdkVersionbuildToolsVersion rootProject.ext.buildToolsVersionminSdkVersion rootProject.ext.minSdkVersiontargetSdkVersion rootProject.ext.targetSdkVersion

2、模式切换

组件化后的每一个业务的module都可以是一个单独的APP(isModuleRun=false), release 包的时候各个业务module作为lib依赖,这里完全由一个变量控制,在根项目 gradle.properties里面的 isModuleRun=true

isModuleRun状态不同,加载application和AndroidManifest都不一样,以此来区分是独立的APK还是lib, 实现方式如下 在build.grade里面配置

if (isModuleRun.toBoolean()) {apply plugin: 'com.android.application'
} else {apply plugin: 'com.android.library'
}##单Module运行需要配置
sourceSets {main {if (isModuleRun.toBoolean()) {manifest.srcFile 'src/main/debug/AndroidManifest.xml'} else {manifest.srcFile 'src/main/AndroidManifest.xml'java {//全部Module一起编译的时候剔除debug目录exclude '**/debug/**'}}}}

3、资源冲突

业务Module和BaseModule资源文件名称重复会产生冲突,解决方案在 每个 module 都有 app_name,为了不让资源名重名,在每个组件的 build.gradle 中增加 resourcePrefix “xxx_强行检查资源名称前缀。 固定每个组件的资源前缀。但是 resourcePrefix 这个值只能限定 xml 里面的资源,并不能限定图片资源。 个人认为约定大于配置,团队内协定好规范,可以避免冲突。

4、组件通讯 组件通讯框架在github上有star最多的有ARouter和ActivityArouter,前者是个人项目,后者是阿里巴巴开源,权衡之下选择阿里的ARouter, 各业务Module之前不需要任何依赖可以通过路由跳转,完美解决业务之间耦合 使用方式如下。

 if (BuildConfig.DEBUG) {   // 这两行必须写在init之前,否则这些配置在init过程中将无效ARouter.openLog();     // 打印日志ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)}
ARouter.init(this); // 尽可能早,推荐在Application中初始化
compile "com.alibaba:arouter-api:$rootProject.aRouter"
每个业务Module都需要添加注解
annotationProcessor 'com.alibaba:arouter-compiler:1.1.3'

跳转方法 在目标Activity上添加path

@Route(path = ARouterManager.BModuleActivity)
public class BModuleActivity extends BaseActivity {@Autowiredpublic String name;@Autowired(name = "age")int age;TextView txt;@Overrideprotected int getLayoutId() {return R.layout.b_module_layout;}@Overrideprotected void initView() {txt = findViewById(R.id.txt);//String name = getIntent().getStringExtra("name"); 也可以这样接受参数ARouter.getInstance().inject(this);txt.setText("name:" + name + ",age:" + age);#开始跳转btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 2\. 跳转并携带参数ARouter.getInstance().build(ARouterManager.BModuleActivity).withString("name", "888").withInt("age", 11).navigation();}});
/*** 路由管理类*/public final class ARouterManager {public static final String AFragment = "/amodule/AFragment";public static final String BFragment = "/bmodule/BFragment";public static final String CFragment = "/cmodule/CFragment";public static final String AModuleActivity = "/amodule/AAModuleActivity";public static final String BModuleActivity = "/bmodule/BModuleActivity";public static final String CModuleActivity = "/cmodule/CModuleActivity";}

上述只使用了ARouter的简单用法,更多进阶用法请参考ARouter文档, ARouter

5、Application

当组件单独运行的时候,每个Module自成一个APK,那么就意味着会有多个Application,很显然我们不愿意重复写这么多代码,所以我们只需要定义一个BaseApplication即可,其它的Application直接继承此BaseApplication就OK了,BaseApplication里面还可定义公用的参数。

更多Android进阶指南 可以扫码 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2023最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

http://www.ds6.com.cn/news/190.html

相关文章:

  • 怎么做像表白墙的网站百度推广怎么做效果好
  • 网站交换链接怎么做谷歌推广代理
  • sm网站寻女主人做性奴51外链代发网
  • ipv6可以做网站吗线上培训平台
  • 做纪念品网站百度提交网站的入口地址
  • 如何知道一个网站是谁做的自动点击关键词软件
  • 建设局网站查询个人信息焦作整站优化
  • 网站网上商城建设服装品牌策划及营销推广方案
  • 宁波网站推广厂家今日实时热点新闻事件
  • php网站开发员工资网络营销模式有哪几种
  • dw自己做网站需要什么推客平台
  • 党建网站建设基本情况电商网站规划
  • wordpress建导航搜索引擎优化seo什么意思
  • 网站建设公司演讲稿企业网站优化报告
  • 大型网站系统图百度搜索名字排名优化
  • 网络推广方案的概念南宁seo
  • 优质网站建设方案廊坊seo推广公司
  • 网站制作公司 沧州谷歌google下载
  • 客户网站建设需要什么资料谷歌google中文登录入口
  • 郑州企业网站价格今日头条关键词排名优化
  • 酒店网站建设策划书百度云登陆首页
  • 网站建设开发案例教程app关键词排名优化
  • 清爽网站模板营销推广方案
  • 员工管理系统商品标题seo是什么意思
  • wordpress添加专题功能seo网站优化培训多少价格
  • 献县做网站的b2b免费推广网站
  • themebox wordpressseo优化教程自学
  • 私人定制网站建设互联网营销工具有哪些
  • 用discuz怎样做网站seo站长助手
  • 柳州正规网站制作公司哪家好全自动推广软件