Android动态部署一:Google原生Split APK浅析

在分析Android动态部署原理之前,我们先通过以下四点来分析一下Google原生支持的Split APK机制,了解了Split APK机制之后,可能会对大家深入理解Android动态部署原理有一定的帮助。
1. 什么是Split APK
2. 在实际开发中如何应用
3. 如何安装
4. SplitApk解析时序图

什么是Split APK

Split APK是Google为解决65536上限,以及APK安装包越来越大等问题,在Android L中引入的机制。
Split APK可以将一个庞大的APK,按屏幕密度,ABI等形式拆分成多个独立的APK,在应用程序更新时,不必下载整个APK,只需单独下载某个模块即可安装更新。
Split APK将原来一个APK中多个模块共享同一份资源的模型分离成多个APK使用各自的资源,并且可以继承Base APK中的资源,多个APK有相同的data,cache目录,多个dex文件,相同的进程,在Settings.apk中只显示一个APK,并且使用相同的包名。
Android动态部署一:Google原生Split APK浅析_第1张图片

在实际开发中如何应用

Android源码中的例子:http://androidxref.com/6.0.1_r10/xref/frameworks/base/tests/FeatureSplit/

  1. 对于源码开发者:
    如上链接中,可以在Android.mk中修改:
    通过LOCAL_AAPT_FLAGS的–feature-of 以及—feature-after来设置Split APK的继承顺序
    AndroidManifest.xml中修改:
"http://schemas.android.com/apk/res/android"
    package="com.android.test.split.feature"
    featureName="feature1">
  • 1
  • 2
  • 3

按顺序分别编译每个独立的APK即可
2. 对于app开发者:

"http://schemas.android.com/apk/res/android"
    package="com.android.test.split.feature"
    featureName="feature1" split="split1">
  • 1
  • 2
  • 3

如何安装

  1. 一次安装
    Base APK和Split APK同时安装到手机上:
a. adb shell pm install-create 创建一个session(1237281889)
Success:created install session [1237281889]
b. adb shell pm install-write session(1237281889) baseapk (base.apk) apk_path  
(/data/local/tmp/FeatureSplitBase.apk)
c. adb shell pm install-write session(1237281889) splitapk (base1.apk) apk_path
(/data/local/tmp/FeatureSplit1.apk)
d. adb shell pm install-commit session(1237281889)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 模块安装
    Base APK必须已经安装到手机中:
a. adb shell pm install-create -r –p installed_packagename(com.android.test.split.feature)
b. adb shell pm install-write session splitapk (base1.apk) apk_path
(/data/local/tmp/FeatureSplit1.apk)
c. adb shell pm install-commit session
  • 1
  • 2
  • 3
  • 4

Example:

1. adb shell pm install-create
Success:created install session [1237281889]
2. adb shell pm install-write  1237281889 base.apk /data/local/tmp/FeatureSplitBase.apk
3. adb shell pm install-write  1237281889 base1.apk /data/local/tmp/FeatureSplit1.apk
4. adb shell pm install-write  1237281889 base2.apk /data/local/tmp/FeatureSplit2.apk
5. adb shell pm install-commit 1237281889
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

SplitApk解析时序图

这里简单画了一下Split APK的解析时序图,后续文章会给出详细的APK文件解析说明
Android动态部署一:Google原生Split APK浅析_第2张图片

你可能感兴趣的:(android,Androi)