插件技术的前世今生插件技术是高级Android工程师必须掌握的技能之一从2012年插件概念的提出(Android版)到2016年插件的兴起插件技术可以可以说是引领Android技术进步的技术。插件技术最初来源于免安装运行APK的思想,而这些免安装APK可以理解为插件。支持插件化的应用可以在运行时加载并运行插件,让应用内一些不常见的功能模块成为插件。一方面,它减少了安装包的大小,另一方面,允许动态扩展应用程序的功能。要实现插件化,主要需要解决三个问题:
将代码加载到插件中,并与主项目相互调用将资源加载到插件中,并与主项目相互调用四个主要组件的生命周期管理下面是一些比较流行的开源插件。在框架内,它们按发生时间排序。插件技术的发展可以通过考虑实现原理来大致了解,根据实现原理,这些框架可以分为三代。
第一代:dynamic-load-apk第一个使用ProxyActivity等静态代理技术来控制插件内PluginActivities的生命周期。这种方法有明显的缺点:插件内的Activity 必须继承自PluginActivity,并且在开发过程中必须仔细处理上下文。 DroidPlugin通过挂钩系统服务来启动插件内的活动,因此插件开发过程与普通应用程序开发没有什么不同,但由于挂钩了过多的系统服务,因此极其复杂且不稳定。第二代:为了平衡插件开发的低侵入性(像常规应用程序一样开发插件)和框架的稳定性,实现原则是选择尽可能少的hook并嵌入。某些组件启用四个主要组件的插件。此外,每个框架都根据其设计理念进行了不同程度的扩展,其中Small 是一个跨平台、基于组件的开发框架。第三代:VirtualApp功能极其强大,可以完全模拟App执行环境,实现零安装操作和双开App技术。 Atlas是阿里巴巴今年开源的一个结合组件化和热修复技术的应用基础框架,广泛应用于阿里巴巴的各类应用中,被称为容器化框架。
插件在Android开发中的重要性近年来,移动互联网几乎被顶级互联网公司垄断,下面的美团、支付宝等App的功能不断增加(最近垄断问题被查)(手动狗头)):
每个app都集成了很多功能入口,美团有“美食”、“电影”、“外卖”、“出租车调度”等,其实每个入口都是一个app,只不过这些集成到了入口中。如果没有插件技术,像美团、淘宝这样的应用会有多大?如果没有插件技术,用户会多下载多少应用到手机上?插件技术的出现,无论对于阿里、阿里这样的互联网IT公司,还是对于互联网IT公司来说,都是一个突破。绝大多数安卓用户。对于Android开发者来说,插件技术已经是高级Android高级工程师必备的技能之一。
如何学习插件技术入门知识首先你应该知道插件技术是一个比较复杂的领域。它的复杂性在于它包含的知识点非常广泛。它不仅需要高层次实现应用架构的能力,还需要了解一些Android系统底层知识。认识一下,这里简单罗列一下相关知识点。
火车票和机票,两个Android 团队有不同的工作空间。在本例中,使用Gradle 脚本。每个项目都有自己的仓库和不同的打包脚本。只需添加您自己的插件即可。插件打包在一起运行。更好的是,您还可以将自己的插件打包并作为应用程序运行。上面我们介绍了关于插件的入门知识,但是总共有六点,了解每一项都需要一些时间。否则,当面对插件项目时,你会在很多地方感到困惑。如果你明白了这六个核心点,一切都会变得容易。
Android中应用插件技术的实现原理其实就是一个动态加载的过程,分为以下几个步骤:
将可执行文件(如.so/dex/jar/apk)复制到您的应用程序APP中。加载可执行文件、替换静态资源、调用特定方法执行业务逻辑。在Android 项目中,动态加载技术可以大致分为两种类型,具体取决于加载的可执行文件的类型。
通过动态加载.so库来动态加载dex/jar/apk文件(现在通常称为动态加载)。第一点,动态加载实际上是在Android的NDK中使用的。so 库是动态加载的。加载并通过JNI调用其封装。这是一个好方法。后者一般是由C/C++编译而来,运行在native层,比运行在虚拟机层的Java代码效率高很多,因此Android可以处理一些对性能要求较高的任务,我经常动态加载.so库到完成该过程。工作(位图解码、图像高斯模糊等)。另外,so库也用于安全领域,因为.so库是从C/C++编译而来,只能反编译为汇编代码,这使得它们比从dex文件反编译的Smali代码更难破译。第二种方法“使用ClassLoader动态加载dex/jar/apk文件”,就是将Java代码编译出来的dex包动态加载到Android中,并执行其中的代码逻辑,这是传统Android中很少使用的技术发展。现在称为动态加载。在Android项目中,所有Java代码都会被编译成dex文件,当Android应用程序运行时,就会执行dex文件中的业务代码逻辑。动态加载技术允许您在Android应用程序运行时加载外部dex文件,这样您就可以在不安装新应用程序的情况下通过网络下载新的dex文件并替换原来的dex文件来升级您的应用程序。您可以实现您的目标(通过更改代码逻辑)。 APK 文件。因此Android的ClassLoader机制主要用于加载dex文件,系统有两个API可供选择。
PathClassLoader:只能加载Android系统上安装的APK文件。因此,由于不符合插件要求,因此不会被考虑。 DexClassLoader:支持加载满足文档确切要求的外部APK、Jar 或dex 文件。所有插件解决方案都使用DexClassloader 在插件APK 中加载.class 文件。最后,学习插件不仅仅是获取上面提到的“入门知识”和“实现原理”,还需要学习主流插件框架的原理,并将其运用到更多的实际应用中。由于篇幅限制,为了帮助朋友们通过插件更系统地学习,我创建了《高级Android插件化强化实战(附源码)》 PDF和《360插件化技术实战》学习视频。如果您是学生,请点赞、评论或私信我。背景来获取它。
直接访问增强且实用的高级Android 插件目录
滴滴插件实用分析
爱奇艺插件实用分析
插件学习视频
2021年新年即将到来。各位新年快乐。衷心祈祷您的愿望能够实现,并一步步向前迈进。新年。如果在这个短暂的假期里你无所事事,“被迫”宅在家里,因为门票一票难求,旅游景点人满为患,那么趁着新年伊始,静静地学习一下也不错。一组让所有人惊叹的插件技术。新的一年到了,加油,工人们!
如果您是学生,需要以上材料,请后台私信我索取。