Android动态加载学习笔记(一)
前言
上周五DPAndroid小分队就第二阶段分享内容进行了讨论,结果形成了三个主题:性能优化、动态加载、内核远离。我选择的是第二项——动态加载。在目前的Android开发中,这一部分知识还是比较流行的,很大一部分原因是65k方法数的限制。国内各大IT公司的app开发者或多或少都遇到过这个老大难问题,并且各辟蹊径,公布了各自的应对方法。选这个议题,第一在于有价值(大型IT公司的Android开发一定会不可避免地在这个问题上纠结过,小型公司/开发者也许不在意,较高的门槛剔除了很多初级的无用信息);第二在于可执行(正是由于这一问题的广泛性与不可避免性,众人八仙过海各显神通,形成多种解决方案,方便参考与学习);第三在于可量化(最终一定会产出一个Demo,最好的结果是直接应用到DPApp上,为诸多开发兄弟提供便利)。
目标
- 掌握Android编译、加载的基本原理;
- 关键技术点在于Dex拆分,编译/运行时资源文件的定位与加载;
- 具体到执行,要分析两到三个优秀的开源动态加载项目(携程、360);
- 产出一个Demo
原理简述
这个议题下,主要是四个知识点:1.Dex拆分;2.热修复;3.动态加载;4.增量更新。其中,Dex拆分是基础,动态加载基于Dex拆分进行,热修复提供了无需在市场中更新apk来修复bug的技术,是最后一根救命稻草,增量更新减少了更新时需要下载的数据量,也可以优化用户体验。
资料汇总
携程 DymamicAPK
奇虎360 DroidPlugin
微信
QQ空间
美团
手机淘宝
天猫技术
大点评 by屠大师
其它一些资料
- 知乎:怎么将 Android 程序做成插件化的形式?
- Android架构思考:没有完美的架构,只有合适的架构
- 利用DexClassLoader实现Android插件化,从而支持动态加载
- 优酷视频: Android插件化及动态部署—ATLAS
- Android应用开发编译框架流程与IDE及Gradle概要
- https://github.com/bunnyblue/ACDD
- https://github.com/dodola/HotFix
Android动态加载学习笔记(一)的更多相关文章
- Android 动态加载 (二) 态加载机制 案例二
探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法 重要说明 在实践的过程中大家都会发现资源引用的问题,这里重点声明两点: 1. 资源文件是不能直接inflate的,如果简单的话直接在程序 ...
- [转载] Android动态加载Dex机制解析
本文转载自: http://blog.csdn.net/wy353208214/article/details/50859422 1.什么是类加载器? 类加载器(class loader)是 Java ...
- Android 动态加载 (一) 态加载机制 案例一
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...
- Android动态加载技术初探
一.前言: 现在,已经有实力强大的公司用这个技术开发应用了,比如淘宝,大众点评,百度地图等,之所以采用这个技术,实际上,就是方便更新功能,当然,前提是新旧功能的接口一致,不然会报Not Found等错 ...
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- Android动态加载jar/dex
前言 在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优 ...
- Android动态加载代码技术
Android动态加载代码技术 在开发Android App的过程当中,可能希望实现插件式软件架构,将一部分代码以另外一个APK的形式单独发布,而在主程序中加载并执行这个APK中的代码. 实现这个任务 ...
- 【Android】Android动态加载Jar、APK的实现
本文介绍Android中动态加载Jar.APK的实现.而主要用到的就是DexClassLoader这个类.大家都知道Android和普通的Java虚拟机有差别,它只能加载经过处理的dex文件.而加载这 ...
- 深入浅出Android动态加载jar包技术
在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...
随机推荐
- akka优势
1.提供可扩展的实时事务处理. 2.为以下目标设计: 垂直扩展(并发) 水平扩展(远程调用) 高容错 3.Akka的核心,Akka-actor非常小的,可以非常方便地放进你的应用中,提供你需要的异步无 ...
- JavaScript面向对象,及面向对象的特点,和如何构造函数
1.面向对象和面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了: 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是 ...
- 使用CocoaPod导入Swift第三方库报错
在使用cocoapod导入swift第三方时出现这样的错误: [!] Pods written in Swift can only be integrated as frameworks; add ` ...
- Swift—下标脚本(Subscripts)
下标脚本可以定义在类(Class).结构体(Struct).枚举(enumeration)这些目标中,可以认为是访问集合,列表或序列的快捷方式,使用下标脚本的索引设置和获取值,不需要再调用实例的特定的 ...
- solr+mongo-connector+mongdb+tomcat集成
话题:solr安装 一.下载solr 本例采用4.10.3版本. Solr所有版本下载地址:http://archive.apache.org/dist/lucene/solr/ 下载完成后,解压的目 ...
- Mongodb和Hive详细对比
本文主要用于分析在大数据场景下Mongodb和Hive的优缺点: 支持的数据类型 支持的查询 支持的数据量 性能优化手段
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- PHP 类中的魔术方法
定义: PHP类中以两个下画线“__”开头的方法被称为魔术方法. 分类: 例如:构造方法:__construct:析构方法:__destruct:动态重载:__set().__get().__call ...
- OpenGL角轴
概述 轴旋转 角轴 概述 OpenGL旋转矩阵 旋转角度直接影响OpenGL GL_MODELVIEW矩阵的前三列,准确地说是向左.向上与向前三轴元素.例如,如果一沿X轴的单位向量(1,0,0)与任一 ...
- 深度学习框架 Torch 7 问题笔记
深度学习框架 Torch 7 问题笔记 1. 尝试第一个 CNN 的 torch版本, 代码如下: -- We now have 5 steps left to do in training our ...