陈家伟 基于Android App Bundle的动态化方案探索

2020-03-01 417浏览

  • 1.基于Android App Bundle 动态化⽅方案探索 陈家伟 爱奇艺资深工程师
  • 2.
  • 3.
  • 4.⾃自我介绍 陈家伟 二零一四年,毕业于南昌大学。 工作轨迹:步步高 -> 平安 -> 至今爱奇 艺。 技术领域:Android 动态化,React Native 等,目前主要负责基于Android App Bundle动态化方案Qigsaw研发和推广。
  • 5.⽬目录 •Google减少APK体积的发展历 程 •国内插件化发展回顾及原理分析 •Android App Bundle原理介绍 •Qigsaw简介及原理分析
  • 6.回⾸首Android第⼀一个10年年,应⽤用发布⽅方式。
  • 7.Android应⽤用⽤用发布流程 APK APK APK
  • 8.传统发布⽅方式弊端 all native library, all language, all density, all OS all…
  • 9.难以忽视的“⼤大”问题
  • 10.40 30 20 10 0 2012 2014 2016 爱奇艺安装包体积 2019
  • 11.⾃自2012年年以来, 应⽤用平均体积增⻓长5倍
  • 12.应⽤用体积越⼤大,安装成功率越低
  • 13.Android 5.0 推出Multiple APK, 旨在减少安装包体积
  • 14.Multiple APK Multiple APK是Google Play提供⼀一个功能, 它允许您的应⽤用针对不不同的设备配置发布不不同的APKs。https://developer.android.com/google/play/publishing/multiple-apks
  • 15.ARMv7 xx-hdpi ARMv8 xxx-hdpi
  • 16.android { ... splits { // Configures multiple APKs based on screen density. density { ... // Specifies a list of screen densities Gradle should not create multiple APKs for. exclude "ldpi", "xxhdpi", "xxxhdpi" } // Configures multiple APKs based on ABI. abi { ... // Specifies a list of ABIs that Gradle should create APKs for. include "x86", “x86_64" // Specifies that we do not want to also generate a universal APK that includes all ABIs. universalApk false } } }
  • 17.… Density app-hdpiX86-release.apk build output You App app-hdpiX86_64-release.apk app-mdpiX86-release.apk CPU Arch app-mdpiX86_64-release.apk
  • 18.Multiple APK 弊端 您可能为每个版本构建 数百个APK,降低迭代 效率。
  • 19.Multiple APK的“恶果” 开发者宁愿它“胖”,也 不不愿麻烦。 导致⽤用户设备存在⼤大量量 未使⽤用过的内容。
  • 20.Android App Bundles
  • 21.Android App Bundle发布流程 Pixel 2XL Bundle Bundle Android App Bundle Android SplitApp APKs Bundle
  • 22.xxhdpi hdpi arm64 x86 Configuration APKs Base APK (shared code) base zh en
  • 23.Pixel 2 XL en xxxhdpi arm64
  • 24.Pixel 2 XL (pre L) en xxxhdpi arm64 Dynamic Delivery xxxhdpi hdpi arm64 x86 zh APK base base zh Split APKs en Optimized APK
  • 25.Dynamic Feature • 安装时不不需要的⼤大型功能(付费 ⾼高级功能、AR功能等)。 • 针对特定受众群体的功能(商业 应⽤用中特定⽤用户下载专属功 能)。 • 很少使⽤用的功能(身份验证、信 ⽤用卡扫描)。
  • 26.
  • 27.国内插件化发展回顾
  • 28.AndroidDynamicLoad DynamicLoadAPK Neptune 2012 2014 2018
  • 29.DirectLoadApk 2012 DroidPlugin Small RePlugin 2014 2018 OpenAtlas DynamicApk VirtualAPK Atlas
  • 30.国内插件化原理理简介
  • 31.META-INF BaseDexClassLoader class.dex class2.de class3.de classN.de x x x res resources.arsc assets BaseDexClassLoader Resources AssetManager lib AndroidManifest.xml 四⼤大组件信息
  • 32.单类加载器器 DexPathList DexFile Element0 Element1 Element2 Element3 PathClassLoader(DexPathList) NativeLibraryElement0 File(lib folder) NativeLibraryElement1 NativeLibraryElement2 Element4 插件 NativeLibraryElement3
  • 33.多类加载器器 LoadedAPK mRouteClassLoader mClassLoader mPlugin ClassLoader0 mPlugin ClassLoader1 mPlugin ClassLoader2
  • 34.资源加载 P P T T E E E E 7 F 0 2 0 0 0 1 AAPT AAPT2 资源加载调⽤用AssetManager#addAssetPath(String)即可 注:Android 5.0之前⽆无法动态增加资源路路径
  • 35.AssetManager中已加载资源路路径: /system/framework/framework-res.apk (PP:01)系统资源 /system/framework/framework-res-hwext.apk (PP:02)/product/overlay/frameworkResOverlay.apk (PP:03)App资源 /data/app/com.iqiyi.test-tX6rCsTDr08d9EOfzYy5ug==/base.apk (PP:7F)'>PP:7F)