您好,登录后才能下订单哦!
本篇内容主要讲解“什么是插件化技术”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是插件化技术”吧!
什么是插件,一般指一个apk、dex、jar文件。插件化技术是指通过classloader将插件加载然后可以被宿主系统去使用。插件文件一般指从网络获取存放在sdcard上。当然已安装到手机data/app目录下的apk也可以叫插件。
插件化技术主要难点是在如何用classloader加载插件。classloader加载分单classloader和多classloader,多classloader优势明显,每个插件的类处在不同classloader隔离性非常好,对于同一个库不同版本问题不会有问题。但是对于Android来说,多classloader hook系统api的点太多,(主要得hook LoadedApk里的classloader,将classloader替换为自定义classloader,这个过程比较曲折)单classloader hook要简单一些(只需在宿主APP内获得当前classloader,一般是PathClassloader,拿到父类BaseDexClassLoader#pathList,它存放了插件文件生成的Element 对象,所以把我们的插件生成一个Element放进去即可)
插件化思想比较简单,但是实现比较复杂,因为需要反射hook很多系统apk,最终对于系统的稳定性不是很好。而且随着Android系统升级需要不断维护,所以开发一个这样的插件得需要专门的一个团队维护成本比较高。
virtual APP实现是直接对系统主要的服务进行了一个虚拟化代替,当然实现过程也是通过反射系统api,然后将自己实现的替换达到APP运行过程的拦截。
virtual app 应用 安装系统已存在的应用并展示,点击启动目标应用先启动virtual APP LeadingActivity,此时运行在APP进程。
然后通过VAMS启动activity,此时运行在VAMS进程,在这里做了目标intent的替换操作,替换为StubAcitivy。然后启动StubActivity此时运行在StubAcitity进程:p,此时以下就运行在:p进程作为启动APP的进程
然后通过反射调用ActivityManagerNative 再跨进程调用系统AMS启动activity,走系统startActivity流程。之后因为hook了HCallbackHandler。在callback中又将原真实目标intent替换回来。然后callback返回false,继续交给ActivityThread#handlerLauncherAcitivty处理
到此,相信大家对“什么是插件化技术”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。