加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长资讯 > 评论 > 正文

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

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

此外,您也可以在应用项目中添加dynamic feature模块,这些模块并不需要在应用首次安装时一起被下载安装。您可以通过使用Play Core Libray在应用运行过程中动态安装dynamic feature。dynamic feature类似国内插件化提供的能力,但dynamic feature功能更强大。

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

通过上图,可以看到dynamic feature可以基于设备配置选取对应的Configuration Split APKs,如此可以进一步减小dynamic feature安装包体积。

更多关于Android App Bundle细节,请阅读官方文档,本文不再赘述。

Android App Bundle之所以能够支持应用运行期间安装dynamic feature,得益于Android 5.0推出的Split APKs功能。

Split APKs

Split APKs是Android 5.0引入的一种全新应用安装机制,其目的是为解决APK体积日益增大问题。Split APK可以将一个完整庞大的APK按照CPU架构、屏幕密度等维度拆分成多个独立APKs。当应用APK下载更新时,依据当前设备配置选取对应配置APKs安装即可。

Android 5.0之前,一个APK代表一个应用。在Split APKs问世之后,一个应用可能对应多个APKs。所有Split APKs拥有相同包名和签名。

Android提供两种方式安装Split APKs。

  1. adb install-multiple [base-apk, split1-apk]
  2. PackageInstaller.

vivo手机不支持adb install-multipl命令。

这里我们重点介绍第二种安装方式,Android 5.0提供PackageInstaller用于安装Base APK和Split APKs。

当第三方应用通过PackageInstaller在应用运行期安装Split APKs时,系统会启动安装器界面供用户选择是否安装此次更新。

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

在用户选择安装后,应用将会被系统“杀死”。当应用再次启动之后,Split APKs就会生效。

在我们实际测试过程中,某些国产手机对PackageInstaller有改动,导致无法正常安装Split APKs。

系统应用可以静默安装Split APKs,且当Split APKs安装完成后,可以决定是否“杀死“应用进程。

  1. public static class SessionParams implements Parcelable { 
  2.  
  3.     ... 
  4.  
  5.     /** {@hide} */ 
  6.     @SystemApi 
  7.     public void setDontKillApp(boolean dontKillApp) { 
  8.        if (dontKillApp) { 
  9.            installFlags |= PackageManager.INSTALL_DONT_KILL_APP; 
  10.        } else { 
  11.            installFlags &= ~PackageManager.INSTALL_DONT_KILL_APP; 
  12.        } 
  13.     } 
  14.     ... 
  15.     ... 

SessionParams是PackageInstaller内部类,setDontKillApp可决定当APK安装完成后是否杀死应用进程。setDontKillApp属于系统Api,因此第三方应用无法调用。

Split APKs加载

应用进程所使用到的ClassLoader和Resources均在LoadedAPK中创建。

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

通过Android 9.0 LoadedAPK源码片段,我们一起了解下Split APKs加载过程。

ClassLoader创建。

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

通过createOrUpdateClassLoaderLocked方法名,可以知道该方法是用于创建和更新ClassLoader。该方法有两个核心步骤。

  1. 如果mClassLoader为空,则创建PathClassLoader实例。

  2. 如果addedPaths不为空,则更新PathClassLoader实例。

该方法指明,应用进程是可以动态加载Split APKs代码。

(编辑:辽源站长网)

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

推荐文章
    热点阅读