最新内容请见原文:Android 插件化 动态升级
不少朋友私信以及 Android开源交流几个 QQ 群 中都问到这个问题,这里简单介绍下
1、作用
大多数朋友开始接触这个问题是因为 App 爆棚了,方法数超过了一个 Dex 最大方法数 65535 的上限,从这个介绍中也知道可以通过多个 Dex 来解决这个问题,因而便有了插件化的概念,将一个 App 划分为多个插件(Dex或相关格式)
常用的其他解决方法还包括:删无用代码,用 H5 代替部分逻辑,买付费版的 Proguard
插件化的其他作用包括:(1) 模块解耦,(2) 单个dex函数不能超过 65535,(3) 动态升级,(4) 高效开发(编译速度更快)
2、概念
Android 插件化 —— 是指将一个程序划分为不同的部分,比如一般 App 的皮肤样式就可以看成一个插件
Android 组件化 —— 这个概念实际跟上面相差不那么明显,组件和插件较大的区别就是:组件是指通用及复用性较高的构件,比如图片缓存就可以看成一个组件被多个 App 共用
Android 动态加载 —— 这个实际是更高层次的概念,也有叫法是热加载或 Android 动态部署,指容器(App)在运⾏状态下动态加载某个模块,从而新增功能或改变某⼀部分行为
3、相关资料
插件化的原理实际是 Java ClassLoader 的原理,看其他资料前请先看:Java ClassLoader基础及加载不同依赖 Jar 中的公共类
Android 也有自己的 ClassLoader,分为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader,区别在于 PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache 中存在缓存的 dex 文件)。而 DexClassLoader 可以加载外部的 apk、jar 或 dex文件,并且会在指定的 outpath 路径存放其 dex 文件
(1) 开源项目
https://github.com/singwhatiwanna/dynamic-load-apk
这个项目实现了一部分的动态加载,原理是 DexClassLoader 加 Activity 代理,可以看看。
这个项目里有几个问题没解决,一个是 FragmentActivity 或是 ActionBarActiviy 的代理方式不行,因为存在 ClassLoader 隔离问题,可用打包方式去掉相同依赖包只保留一份来解决。that 指针可通过复写大部分接口从而改为 this 指针调用即可,另外 Activity 的创建过程有缺失
https://github.com/mmin18/AndroidDynamicLoader
这是点评一个工程师介绍的方式,和上面不同的是:他不是用代理 Activity 的方式实现而是用 Fragment 以及 schema 的方式实现
(2) 其他资料
淘宝伯奎:Android插件化及动态部署—ATLAS http://v.youku.com/v_show/id_XNTMzMjYzMzM2.html
最后:Demo 实现起来很简单,但整体以及细节的考虑很多,还是很费时间的,大家有其他不错的资料也欢迎评论中告诉我
透露下:
如果时间允许的话,国庆前会把我上半年对于插件化分享的 PPT 放出来,至于整体的实现源码的开源因为还有不少小 Bug,还得等一段时间
中秋后会放出上半年一个关于 Java 注解以及几个常用开源项目注解原理的分析,欢迎围观
相关推荐
2. 动态更新和灵活性:通过插件化,应用程序可以支持动态加载和更新插件,而无需重新编译和发布整个应用程序。这为应用程序的功能扩展和迭代提供了更大的灵活性,可以快速响应市场需求和用户反馈。 3. 安全性和隔离...
避免升级时频繁的打包,下载和安装apk,把新增的功能用插件化的形式,安装插件即可升级apk
我 们都知道在Git 中想要过滤掉一些不想提交的文件,可以把相应的文件添加到.gitignore 中,而.gitignore 这个Android Studio 插件根据不同的语言来选择模板,就不用自己在费事添加一些文件了,而且还有自动补全功能...
项目介绍在Android开发中采用基于ClassLoader的动态加载技术,可以达到不安装新APK...项目结构文件夹说明 Android插件化开发框架FrontiaAndroid动态加载技术文章以及相关项目其中,Android的frontia是基于类加载器的插
android插件化方案 一、前言 插件化的好处: 1.动态功能更新,可以进行动态添加新功能而无需用户下载安装应用 2.热修复,发现bug后,直接更新存在bug的插件,用户无需重新安装应用,甚至不需要关闭应用,bug即可修复...
Android插件化,Android MVP架构,Android MVVM架构的集大成者,帮助您快速构建自己的App项目开发框架,,把自己主要的能量放在自己的项目的业务功能上实现,另外在长期的工作实践中总结整理大量的实用工具类在项目...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
Gradle Play Publisher Gradle Play Publisher是一个Gradle插件,可让您从持续集成服务器或有命令的任何地方将APK和其他应用程序详细信息上传到Google Play商店l Gradle Play Publisher Gradle Play Publisher是...
RePlugin-灵活,稳定,易于使用的Android插件框架 RePlugin是完整的Android插件解决方案,适合一般使用。 () 它的主要优点是: 极高的灵活性:无需升级应用程序即可支持新组件,甚至全新的插件。 非凡的稳定性...
PluginManager也是入口类,核心方法是inite初始化、loadLastVersionPlugin加载插件、reloadInstalledPluginResources加载插件与补丁的资源、loadHotfixPluginClassLoader加载补丁的类。插件与补丁更新的最小单位是...
与某些Android插件框架不同,Atlas是一个组件框架(我们称为Bundle),而Atlas不是一个多进程框架。 您可以看到该项目中有三个主要库( / / ) :这是客户端核心库,它的工作是安装每个捆绑软件,并
该项目目前集成现在主流的开发框架和技术,包括okhttp、rxjava、retrofit、glide、greendao、dagger、mvp、md风格、皮肤插件、热修复tinker,bugly、友盟数据统计和组件化等。 采用组件化开发框架,可以使模块单独...
开发环境灵活多样,支持Myclipse/Eclipse/Idea作为服务器端开发工具,同时Eclipse/AndroidStudio可用于手机客户端开发,数据库则选用mysql。系统架构采用三层分离技术,即界面层、业务逻辑层和数据层,并遵循MVC设计...
Android系统从一开始就内置了SQLite数据库,为应用程序提供了方便的数据持久化解决方案。 该Demo的核心是创建一个SQLiteOpenHelper的子类,该类负责创建和升级数据库。在这个子类中,通常需要实现onCreate()和...
gradle-play-publisher:GPP是Android的非官方发布自动化Gradle插件。 它可以执行从构建,上传,然后升级您的App Bundle或APK到发布应用列表和其他元数据的任何操作
市场上相应的检测平台诸如检测通、凡特网等皆为pc端检测网站,并且操作繁琐不够人性化,用户在实地使用中存在很多问题。昆山工业技术研究院着眼于为委托用户和质检机构搭建良好的沟通桥梁,免去目前市场业务中企业...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
升级后调试:U盘升级后,机器属于出厂状态,用户自己调试的参数需要重新设置,比如收台、网络连接、色温、节能环保、动态降噪等功能的基本设置,这部分可以根据用户使用习惯自行进行配置。 注意事项: 1、升级U盘...
升级后调试:U盘升级后,机器属于出厂状态,用户自己调试的参数需要重新设置,比如收台、网络连接、色温、节能环保、动态降噪等功能的基本设置,这部分可以根据用户使用习惯自行进行配置。 注意事项: 1、升级U盘...