插件化

目前市面上有许多Android插件化方案。每种方案都有各自的实现思路。而且随着Google对非 SDK API管理逐渐严格。普遍认为一个比较好的插件化方案应该对Android系统做到0 hook
我们这里不去讨论哪种插件化比较好,只是一起来看一下目前业界诸多插件化方案的实现,理解他们的思想,学习他们实现过程中用到的Android相关的诸多知识。

Android P开始对对非SDK API进行严格管制,先来看一下私有SDK API: https://developer.android.google.cn/about/versions/pie/restrictions-non-sdk-interfaces

VirtualApk

VirtualApk是由滴滴开源的一款插件化框架。主要实现思路是hook系统多处对于Android四大组件的处理,以达到调用插件的四大组件的实现。我们这里主要看一下它是如何实现的、用到了哪些东西。顺便了解Adnroid四大组件的运行机制。
下面的文章不会去细究实现逻辑,只看VirtualApk关于一些关键点的实现思路。

如何解析一个插件APK

VirtualApk中,一个插件会被打成一个.apk文件。因此加载插件其实就是加载这个.apk文件,那么如何加载一个.apk文件,并解析出这个文件中的信息,比如四大组件、resourse、类等等 :

插件APK的解析

其实不只是VirtualApk,很多其他插件化框架对于插件apk的解析也是这个思路。

上面了解了一个插件的apk的类、资源、四大组件信息时如何被加载到宿主中了。但是我们知道四大组件都需要在manifest文件中注册后才能运行,但是插件的四大组件是不可能预先在宿主的manifest文件中注册的,那么如何让它们运行起来呢?
接下来我们就来看一下宿主如何支持插件的四大组件运行的,首先来看最重要的Activity :

插件Activity的启动

在阅读源码过程中发现了一个问题: PathClassLoader与DexClassLoader到底有什么不同

VirtualApk主要是通过hookInstrumentation来实现对插件Activity运行支持的:

插件Activity的启动

插件Service的运行管理

对于插件Service的支持和插件Activity类似,VirtualApk动态代理了AMS。不过不同的是它自己管理了一套插件Service的运行系统:

插件Service的运行管理

插件BroadcastReceiver的管理

VirtualAPK对于插件的BroadcastReceiver处理十分简单,就是在加载插件的时候把插件的所有BroadcastReceiver转为动态广播并注册。所以就不去具体的看源码了,这里我们研究一下Android中的BroadcastReceiver的管理:

从源码理解BroadcastReceiver

插件ContentProvider的处理

对于插件ContentProvider的运行支持类似于插件Service插件BroadcastReceiver的思想结合体。我们继续分析一下:

插件ContentProvider的处理

解决资源冲突的问题

宿主apk和插件apk是两个不同的apk,他们在编译时都会产生自己的resources.arsc。即他们是两个独立的编译过程。那么它们的resources.arsc中的资源id必定是有相同的情况,那么在宿主加载插件的时候就会出现冲突,怎么解决呢 ?

解决插件资源ID与宿主冲突的问题

Replugin

如何防止进程之间的并发问题: 进程间的同步

Replugin提供了一个单独的进程来管理插件,我们先来分析一下这个进程的工作原理 : 插件守护进程模型 [草稿]

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/20270,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?