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

Posted ximsfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android动态部署一:Google原生Split APK浅析相关的知识,希望对你有一定的参考价值。

转载请注明出处:http://blog.csdn.net/ximsfei/article/details/50884862

在分析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源码中的例子: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中修改:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.test.split.feature"
    featureName="feature1">

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.test.split.feature"
    featureName="feature1" split="split1">

如何安装

  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. 模块安装
    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

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

SplitApk解析时序图

这里简单画了一下Split APK的解析时序图,后续文章会给出详细的APK文件解析说明

以上是关于Android动态部署一:Google原生Split APK浅析的主要内容,如果未能解决你的问题,请参考以下文章

Android动态部署五:如何从插件apk中启动Service

Android动态部署五:如何从插件apk中启动Service

Android动态部署二:APK安装及AndroidManifest.xml解析流程分析

云原生动态周报 | Google推出VM Manager

NDK

android ndk是啥