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源码中的例子:http://androidxref.com/6.0.1_r10/xref/frameworks/base/tests/FeatureSplit/
- 对于源码开发者:
如上链接中,可以在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
如何安装
- 一次安装
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
- 模块安装
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浅析相关推荐
- Android动态部署六:如何从插件apk中启动BroadcastReceiver和ContentProvider
转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51083464 github地址:https://github.com/ximsfei/Dy ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- 实现Android 动态载入APK(Fragment or Activity实现)
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...
- [转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...
本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html 前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来 ...
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...
前言 Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://ov ...
- Android Google原生语音识别
1.调用Google原生语音识别 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);intent.putExtr ...
- Android Google原生系统刷机
备份工具 钛备份 下载ROM的网站: 魔趣 androidfilehost lineage Google原生系统 androidsage 第三方 REC orangefox TWRP 原生跳过谷歌向导 ...
- android动态壁纸是什么格式的,为什么动态壁纸为APK格式? -
动态壁纸需要安装,并且apk格式是Android的一种特殊应用程序格式. 动态壁纸相当于一个应用程序,当然,apk ps: 不要说您被用作计算机桌面和屏幕保护程序. . . 您使用的是akp格式,当然 ...
最新文章
- Ubuntu的apt-get使用国内的源
- Devexpress XtraGrid 控件编辑的内容,如何实时生效
- mysql常用命令,mysql语法,mysql登陆、创建数据库、创建用户、更改密码、为用户授权...
- 函数计算支持应用中心功能
- 【Matplotlib】【Python】如何使用matplotlib绘制各种图形
- Android群英传笔记——摘要,概述,新的出发点,温故而知新,能够为师矣!
- iOS IPv6 被拒2
- ubuntu下libfetion问题
- 威廉玛丽学院计算机专业好吗,威廉玛丽学院商学院BA专业怎么样?
- Unity插件——文字转朗读语音RtVioce插件功能/用法/下载
- 伊拉克COR证书电子电器
- 沐风:可怕的想什么就来什么
- [python] 分治法查找数组元素的最大值和最小值
- PADS VX2.8 敷铜自动倒角的使用方法
- 轻售后、缺服务,产销双增背景下家电行业“后院失火”?
- 基于Spark框架的大型分布式矩阵求逆运算实现(二)——大型下三角矩阵求逆运算
- 文本分类(text classification)
- 解决报错:soundfile.LibsndfileError: Error opening ‘.wav‘: File contains data in an unknown format.
- Lunix基础终端控制器操作
- R语言:reshape2包里的melt()、dcast()、acast()函数学习