Android高级之十三讲

  • 时间:
  • 浏览:2
  • 来源:uu直播快3_UU快3直播平台

缺点:patch时间不得劲长,须要异步补救

   本文来自http://blog.csdn.net/liuxian13183/ ,引用须要注明出处!

2、官方https://developer.android.com/topic/performance/reduce-apk-size.html

压缩APK:

待研究项目:

老版本2.0,新版本2.1,使用bsdiff工具分解出两者的差异包patch.jar,将patch发布,在客户端使用native的patch法子将data/app目录下的拿下的apk与patch.jar合并,后来 再重新安装即可;此时的apk与原2.1的apk的md5一致。

Tinker后台搭建:https://github.com/baidao/tinker-manager

https://github.com/limpoxe/Android-Plugin-Framework

1、都可不还后能 独立安装,但不可独立运行

        AndFix 采用差分包的法子,将要修复的文件打成dex包,通过注解的法子定位到要修改的文件,最终用jni在c层替换掉原文件的指针达到热修复的目的(这是五种So库的Hook法子,其他Hook法子多采用反射法子实现)。

原理:Java高级之虚拟机加载机制

 nuwa QQ空间使用相似法子,通过往classloader的pathlist里加入一有另一个dex,采用覆盖的法子来替换到原来的模块。

https://github.com/kaedea/android-dynamical-loading

Android6.0后来 的内联策略会给热修复带来一定的影响:http://dwz.cn/4O15FS

small 目前最新的热加载框架,支持切割dex实现动态加载,方便业务模块、公共的升级。

1、减少ProGuard的keep数量,例:加上openmobileapi明显26M降到25M



Android热加载出现的因为分析在于:第一5.1出现后来 如此好的法子补救App法子数超过65536的问題报告 ,第二启动不得劲慢,因为分析加载的模块比较多。本质上还是虚拟机支持JIT的加载机制。

2、具有向下兼容性,即可拓展性

         温部署:须要重启Activity(修改指针更新法子)

Tinker,原理跟增量更新一样

热加载:即针对插件化的实现,当用户用到此功能,再去下载对应patch包的五种实现法子。

组件化与插件化:前者对功能进行拆分后,独立开发,打成一有另一个包发布;后者对功能拆分,使用主包+分包,都可不还后能 分别独立发布。

 AndroidDynamicLoader 最早分析的动态加载框架,主要使用activity当壳fragment当内容的法子,来使用空壳activity的应用,将满是fragment的apk加载进来,使用activity的生命周期来控制fragment的加载,其中原来此人 做的一有另一个自动化测试框架也是同样原理。

热更新:五种法子,五种是multidex,五种是修改指针;前者须要重新启动,后者不要重新启动。指下载patch包,修复错误的五种法子。

         冷部署:须要重启Application(multidex更新法子)

关于热修复,也被称为插件,目前比较流行的有HotFix、Nuwa、DroidFix、AndFix等,哪些地方地方框架均都可不还后能 在github或其他地方找到,原理如上,法子多样,有覆盖的、有重定向的等等,通过配置、设置action等法子;而作为插件须要满足以下条件:

相比而言相似Qzone的Nuwa是最好的

优点:下载包小,流量耗费少

增量更新是谷歌提出的五种App更新法子,Instant Run主要应对更新包过大,耗费流量的问題报告 。

每次构建时 ProGuard 总要输出下列文件:

         热部署:无须要重启Application和Activity(修改指针更新法子)

Android 富含一有另一个 ClassLoader, 分别为URLClassLoaderPathClassLoaderDexClassLoader。其中

multiDex使用时,会判断系统是算不算支持multiDex,后来 判断算不算二级dex要安装,将二级dex解压到secondary-dexes目录,通过反射注入ClassLoader的pathList中,完成完整版安装。

3、如此运行在宿主守护任务管理器中,后来 都可不还后能 被禁用、替换

使用场景包括修复线上bug、做手机皮肤、开发应用商店等系统提供的接口

HotFix出现的因为分析在于:从出现Bug,补救Bug,再发版,再升级,你这一 过程过于漫长,后来 有的用户不你会升级,影响功能的使用以及产品的体验。