在分析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">
  • 1
  • 2
  • 3

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

<manifest xmlns:android="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浅析相关推荐

  1. Android动态部署六:如何从插件apk中启动BroadcastReceiver和ContentProvider

    转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51083464 github地址:https://github.com/ximsfei/Dy ...

  2. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  3. Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...

  4. 实现Android 动态载入APK(Fragment or Activity实现)

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...

  5. [转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html 前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来 ...

  6. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...

    前言  Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://ov ...

  7. Android Google原生语音识别

    1.调用Google原生语音识别 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);intent.putExtr ...

  8. Android Google原生系统刷机

    备份工具 钛备份 下载ROM的网站: 魔趣 androidfilehost lineage Google原生系统 androidsage 第三方 REC orangefox TWRP 原生跳过谷歌向导 ...

  9. android动态壁纸是什么格式的,为什么动态壁纸为APK格式? -

    动态壁纸需要安装,并且apk格式是Android的一种特殊应用程序格式. 动态壁纸相当于一个应用程序,当然,apk ps: 不要说您被用作计算机桌面和屏幕保护程序. . . 您使用的是akp格式,当然 ...

最新文章

  1. Ubuntu的apt-get使用国内的源
  2. Devexpress XtraGrid 控件编辑的内容,如何实时生效
  3. mysql常用命令,mysql语法,mysql登陆、创建数据库、创建用户、更改密码、为用户授权...
  4. 函数计算支持应用中心功能
  5. 【Matplotlib】【Python】如何使用matplotlib绘制各种图形
  6. Android群英传笔记——摘要,概述,新的出发点,温故而知新,能够为师矣!
  7. iOS IPv6 被拒2
  8. ubuntu下libfetion问题
  9. 威廉玛丽学院计算机专业好吗,威廉玛丽学院商学院BA专业怎么样?
  10. Unity插件——文字转朗读语音RtVioce插件功能/用法/下载
  11. 伊拉克COR证书电子电器
  12. 沐风:可怕的想什么就来什么
  13. [python] 分治法查找数组元素的最大值和最小值
  14. PADS VX2.8 敷铜自动倒角的使用方法
  15. 轻售后、缺服务,产销双增背景下家电行业“后院失火”?
  16. 基于Spark框架的大型分布式矩阵求逆运算实现(二)——大型下三角矩阵求逆运算
  17. 文本分类(text classification)
  18. 解决报错:soundfile.LibsndfileError: Error opening ‘.wav‘: File contains data in an unknown format.
  19. Lunix基础终端控制器操作
  20. R语言:reshape2包里的melt()、dcast()、acast()函数学习

热门文章

  1. 基于STM32F767的RT-Thread移植学习
  2. python外国网站爬虫_python 网络爬虫-爬取网页外部网站
  3. 西南财经大学本科毕业论文答辩PPT模板
  4. 好朋友同时撩三个妹子,扬言我也可以,我直呼好家伙---我把我偷学来的全都告诉你
  5. opencv c++版本图片及视频打开与保存
  6. 十分钟玩转3D绘图:WxGL完全手册
  7. Python图像批处理(图像非监督分类)
  8. 用分立元件实现串口通讯TTL/RS232电平转换
  9. 51单片机实现数码管显示小数
  10. (转)PKI技术及应用开发指南