加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长资讯 > 评论 > 正文

爱奇艺开源 Qigsaw,基于 Android App Bundle 的动态化框架

发布时间:2019-07-05 19:53:02 所属栏目:评论 来源:佚名
导读:副标题#e# 近日爱奇艺宣布开源基于Android App Bundle的动态化框架Qigsaw。以下是其官方在演讲中对项目的介绍。 我们于2019年6月26号正式开源Qigsaw。 Qigsaw是爱奇艺自主研发的动态化框架,其核心优势如下: 利用Android App Bundle开发套件,极速开发体验

在此,我们首先介绍Qigsaw多进程功能。以下图场景为例。

爱奇艺开源 Qigsaw,基于 Android App Bundle 的动态化框架

依据Qigsaw安装、加载split APKs原则,当游戏APK安装完成后,就会在主进程完成加载。在游戏APK中有两个Activity,他们所处进程不同。当启动GameActivity01时,页面正常启动。但当启动GameActivity02,您的App会出现崩溃。原因是GameActivity02运行在:game进程,游戏APK仅在主进程加载,并未在:game进程加载,因此系统会抛出ClassNotFoundException异常。

为解决这类问题,Qigsaw提供了如下解决方案。

  1. 在进程启动之初即Applicatin#attachBaseContext调用时,加载所有已安装splits。
  2. Hook PathClassLoader。

第一种方案解决的场景是:game进程首次启动,即启动GameActivity02之前:game进程从未启动过。

第二种方案解决的场景是:game进程已经启动并正在运行。

Hook PathClassLoader具体做了如下事情。

  1. 当出现ClassNotFoundException时,判断该类是否为splits四大组件。
  2. 当异常类为splits四大组件时,加载所有已安装未加载split APKs。
  3. 如加载完所有已安装未加载split APKs后依然出现ClassNotFoundException异常,则返回空四大组件类,防止进程崩溃。

如果split APKs某Activity的exported熟悉为true,那么该Activity可能会在split未安装的情况下被外界调起。当出现这种情况时,Qigsaw返回空Activity类防止进程崩溃。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读