`
阅读更多

最新内容请见原文: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 注解以及几个常用开源项目注解原理的分析,欢迎围观

分享到:
评论

相关推荐

    android插件化开发

    Android插件化开发是一种技术,它允许开发者在不重新编译和安装主应用程序的情况下,添加、更新或移除应用的功能模块。这种技术的核心是将一个大的应用分解为多个可插拔的部分,即插件,每个插件都是一个独立的APK,...

    Android插件化框架研究.zip

    Android插件化框架主要是通过将应用的不同功能模块(即插件)独立打包,使得它们可以在不重新编译或安装主程序的情况下被动态加载和运行。这样可以降低应用的更新成本,提高用户体验,因为用户只需更新有问题的部分...

    android插件化加载并启动外部apk

    总的来说,360的DroidPlugin方案为Android应用提供了强大的插件化能力,让开发者能够更灵活地管理和升级应用功能。但同时,也需要开发者具备深厚的Android底层知识和安全意识,以确保插件化应用的稳定性和安全性。

    Android动态部署与插件化.pptx

    **Android插件化**则更注重于将应用划分为多个可独立开发、发布的模块(插件)。插件化的核心技术包括: 1. **Hook技术**:通过对系统API如ApkManager的Hook,使得主应用能够识别并加载插件APK。 2. **Process和...

    插件化动态加载apk

    在Android开发领域,插件化动态加载apk是一种高级技术,它允许应用程序在运行时加载和卸载未预先安装的apk,以实现功能扩展或者界面皮肤更换等效果。这种技术极大地提高了应用的灵活性和可维护性,同时减少了用户...

    android插件化及动态部署

    ### Android插件化及动态部署 #### 插件化与动态部署的概念 在移动应用开发领域,特别是Android平台上,随着应用程序复杂度的不断提高以及业务需求的快速变化,传统的开发模式面临着诸多挑战,如代码量膨胀、维护...

    android 插件化demo

    在Android平台上,插件化是一种高级的开发技术,它...总之,Android插件化技术极大地提高了应用的灵活性和可维护性,通过学习和实践这个Demo,开发者可以更好地理解和运用这一技术,实现类似支付宝那样的动态功能扩展。

    Android 插件编写方法

    Android插件化设计的核心思想是将应用的部分功能或服务分离出来,形成独立的模块(即插件),这些插件可以在运行时被主应用动态加载。这样可以实现快速迭代更新,降低维护成本,同时为用户提供更灵活的功能选择。 ...

    Android插件化开发之small

    《Android插件化开发之Small框架详解》 在Android应用开发中,插件化技术是一项重要的高级技术,它使得应用程序可以动态加载插件模块,提高了软件的灵活性和可扩展性。其中,Small是一个广受开发者关注的开源插件化...

    android 插件化

    以下是对"android插件化开发简单易懂的demo"的详细解释: 一、插件化概念 插件化是指在主应用(Host)中动态加载插件应用(Plugin)的能力。在Android系统中,这通常通过改变类加载器(ClassLoader)和进程通信机制...

    DroidPlugin Android 插件化的实现原理以及在 360 手机助手中的应用

    ### DroidPlugin Android 插件化的实现原理及在 360 手机助手中的应用 #### 一、概述 随着移动互联网技术的发展与普及,Android 应用日益复杂多样化,传统的开发模式难以满足快速迭代的需求。在此背景下,插件化...

    android功能模块 插件化demo

    总之,"android功能模块 插件化demo"是一个展示如何在Android环境中实现动态加载和升级功能的有效实践。通过插件化和模块化,开发者可以创建更灵活、可扩展的应用,同时利用sharedUserId来实现组件间的紧密协作。...

    android 动态加载之自动升级(插件式开发)

    插件化开发则是在动态加载的基础上进一步发展,它将应用程序分解为多个独立的组件(插件),每个组件都可以单独编写、编译和更新。在运行时,主应用(宿主)负责管理和加载这些插件,实现功能的动态扩展。这种方式...

    Android插件

    3. **动态加载**:使用 DexClassLoader 或 DexElement 类来实现Dex文件的动态加载,这是Android插件化的核心技术之一。 4. **资源复用**:通过反射或者自定义Resource管理器,实现插件与主应用共享资源。 **实现...

    dynamic-load-apk(android模块化,热更新,插件化)

    插件化是Android应用架构设计的一种方式,它允许应用在运行时动态加载和卸载插件模块。在Android中,由于沙盒机制的限制,实现插件化并不简单,需要处理类加载、资源映射、权限管理等问题。常见的插件化框架如...

    APP实现插件化学习Demo

    在移动应用开发领域,插件化技术是一种提升应用灵活性和可...通过这个Demo,你可以亲手实践这些概念,加深对Android插件化技术的理解,从而在实际开发中灵活运用。记得在实践中不断探索和优化,才能真正掌握这项技术。

    动态加载apk(插件)

    - **Android P及以后的变化**:Android系统不断升级,插件化技术也需要随之调整,例如Android P引入的ART的 Ahead-of-Time (AOT) 编译,对动态加载带来新的挑战。 综上所述,动态加载apk(插件)技术是Android开发...

    Android中的动态加载机制

    对于Android系统来说,动态加载机制尤其适合用于实现插件化,使得开发者能够像安装插件一样扩展应用程序的功能。 二、Android中的动态加载实现 1. ClassLoader重写:Android系统的类加载是通过ClassLoader来完成的...

    Node.js-分析DroidPlugin深入理解插件化框架

    DroidPlugin是一款开源的Android插件化框架,它的核心目标是实现应用间的动态插件化,即在不重新安装主应用的情况下,能够添加、删除或更新功能模块。这极大地提高了应用的灵活性和可维护性,同时也降低了用户升级...

Global site tag (gtag.js) - Google Analytics