美文网首页
笔记——模块化-组件化-插件化小知识(七)

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

作者: 木溪bo | 来源:发表于2018-12-10 16:56 被阅读22次

    ——》个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主精华、书籍

    什么是模块化,组件化, 插件化?

    从模块化到组件化再到插件化

    androidStudio 多项目依赖同一个module

    组件化/模块化

    1、首先组件和模块都不是官方规定的,都是这些技术发展下来大家约定俗成的概念,他们都是一个个Module,只是概念内容不一样而已。

    Module包含两种格式: application, library。一个Module就是一个小的项目,Module通过依赖来注入到主app工程中,也是AS概念中的模块。

    >1.模块化开发:按照项目业务模块来划分,将一个app按业务拆分为登录模块、聊天模块等等。

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

    >2.组件化开发:对应用功能的封装,一个功能一个组件。比如网络连接交互组件、即时通讯IM组件、数据库组件等。是对模块化更小的细分。

    正常一个app中可以有多个module,但是一般只会有一个module是设置为application的,其他均设置为library。将一个工程分成各个模块,各个模块之间相互解耦,可以将module均设置为application独立开发并编译成一个独立的 app进行调试,然后又可以将各个模块module均设置为library组合起来整体构成一个完整的 app,这个概念和模块化没有本质的界限。

    组件可以分为两大类,一类是application组件,一类是libs组件,application组件是一个可运行的app。library组件可以作为application的依赖,但是自身不可作为程序运行的存在。只有Module类型为application的组件才能单独提出来做为程序运行存在。

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

    解决以下项目中的问题:

    1.稍微改动一个模块的一点代码都要编译整个工程,耗时耗力

    2.公共资源、业务、模块混在一起耦合度太高

    3.不方便测试

    2.插件化开发

    宿主是指普通的apk,插件一般是指经过处理的dex或者apk,在主流的插件化框架中多采用经过特殊处理的apk来作为插件,处理方式往往和编译以及打包环节有关。Android应用程序的.java文件在编译期会通过javac命令编译成.class文件,最后再把所有的.class文件编译成.dex文件放在.apk包里面。那么动态加载(插件化)就是在运行时把插件apk直接加载到classloader里面的技术。

    目的:插件化就是要减小宿主程序apk包的大小,同时降低宿主程序的更新频率并做到自由装载模块、在线更新模块。

    好处:

    1.宿主和插件分开编译

    2.并发开发

    3.动态更新插件

    4.按需下载模块

    5.方法数或变量数爆棚

    总结:

    ①组件化:

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

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

    3. 更好的解耦

    ②插件化:

    1. 用于版本新添加功能,更多的是启动另一个apk中的activity,或使用另一个apk的资源

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

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

    4.本质上它使用的技术还是热修复技术

    ③热更新:可以使用第三方的框架,现在都已经很成熟了如:腾讯提供的Bugly

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

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

    3.强调的是修改线上版本的bug,用技术去实现不更新整个apk的条件下,修改掉bug

    总:

    组件化的单位是组件(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 打入签名

    相关文章

      网友评论

          本文标题:笔记——模块化-组件化-插件化小知识(七)

          本文链接:https://www.haomeiwen.com/subject/uiidfqtx.html