前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记——模块化-组件化-插件化小知识(七)

笔记——模块化-组件化-插件化小知识(七)

作者头像
木溪bo
发布2018-12-27 09:57:46
8590
发布2018-12-27 09:57:46
举报
>1.模块化开发

将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。模块我们相对熟悉,比如登录功能可以是一个模块,搜索功能可以是一个模块,汽车的发送机也可是一个模块。

一个Module就是一个小的项目,也是AS概念中的模块。因此我们开始设计common模块, common_business模块,甚至db模块。模块的好处是什么? 相比于包来讲,模块更灵活,耦合更低,随意插拔,想引入哪个就引入哪个。根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,就是模块化。模块化不只包含公共部分,当然也可以是业务模块。

模块化的概念可以说贯穿整个组件化,插件化。

>2.组件化开发

基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件,已较少耦合。将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk,这就是组件化开发。

组件可以分为两大类,一类是application组件,一类是libs组件,application组件是一个可运行的app。libs组件可以作为application的依赖,但是自身不可作为程序运行的存在。

组件化是建立在模块化思想上的一次演进,一个变种。组件化本来就是模块化的概念。但是组件化的核心是什么? 是模块角色的可转换性。是的,就是可转换性。组件化的核心是角色的转换。 在打包时是library; 在调试时是application。

解决以下项目中的问题:

1.稍微改动一个模块的一点代码都要编译整个工程,耗时耗力 2.公共资源、业务、模块混在一起耦合度太高 3.不方便测试

>3.插件化开发

Android应用程序的.java文件在编译期会通过javac命令编译成.class文件,最后再把所有的.class文件编译成.dex文件放在.apk包里面。那么动态加载(插件化)就是在运行时把插件apk直接加载到classloader里面的技术。

好处:

1.宿主和插件分开编译 2.并发开发 3.动态更新插件 4.按需下载模块 5.方法数或变量数爆棚

总结:

①组件化:

1. 用于项目过大,每次编译时间长

2. 用于团队多个人分工开发不同的模块

3. 更好的解耦

②插件化:

1. 用于版本新添加功能

2. 解决方法数超过65536问题

3. 按照需要下载模块,减小项目apk的大小

③热更新:

1. 用于修复已经上线的bug等问题

2. 一般不用于新功能的版本上线

组件化的单位是组件(module)。插件化的单位是apk(一个完整的应用)。 组件化的灵活性在于按加载时机切换,分离出独立的业务组件,比如微信的朋友圈 插件化的灵活性在于是加载apk, 完全可以动态下载,动态更新,比组件化更灵活。


整个apk打包的流程图:

使用Android Asset Packaging Tool(aapt) ,将AndroidManifest.xml和res下的资源编译生成R.java文件,这样java文件就可以去引用资源了 - 使用aidl 工具去生成对应的Java interfaces - 将src和通过aapt生成的R.java,.aidl文件通过javaC命令去生成.class 文件 - 使用dex tool 将class文件转化成Dalvik byte code.这时候要将所有class文件和第三方的jar包都包括。 - 所有没有编译过得图片和编译过的图片,.dex文件传给apkbuilder去打包成.apk - 最后采用zipalign tool 打入签名

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • >1.模块化开发
  • >2.组件化开发
  • >3.插件化开发
  • 总结:
  • 整个apk打包的流程图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档