Android APP增量升级及插件化实现方式

Android实现应用的增量更新\升级- http://blog.csdn.net/yyh352091626/article/details/50579859

漫谈Android 增量更新- http://blog.csdn.net/dd864140130/article/details/52928419

>引用: http://www.2cto.com/kf/201402/276811.html

你的apk已经发布了3个版,1.0,2.0,3.0,这时候你要在后台发布4.0,在你上传时,就应该生成 
1.0——>4.0的差异包; 
2.0——>4.0的差异包; 
3.0——>4.0的差异包; 

选择使用这个开源二进制比较工具来实现: http://www.daemonology.net/bsdiff/ 

Android apk增量升级- http://blog.csdn.net/sbsujjbcy/article/details/46237637

-- Lua语言实现增量升级。

-- Android实现应用的增量更新\升级-- http://blog.csdn.net/yyh352091626/article/details/50579859
-- IncrementallyUpdate-- https://github.com/smuyyh/IncrementallyUpdate

Android应用市场省流量更新(增量升级)原理解析- http://blog.csdn.net/jiangwei0910410003/article/details/53227940

> 由于java本身并没有提供相应的api,我们需要C去帮助实现,然后生成.so包进行调用。相对于生成差异包的bsdiff,也给提供了另一个bspatch。 差异包示例: https://github.com/JackCho/AndroidPatchUpdate

Android 增量更新完全解析 是增量不是热修复-- http://blog.csdn.net/lmj623565791/article/details/52761658  

   https://github.com/hongyangAndroid/BsDiff_And_Patch

Android应用市场省流量更新(增量升级)原理解析- http://blog.csdn.net/jiangwei0910410003/article/details/53227940

------------------------------------------------------------------------------

Android中插件开发篇总结和概述-- http://blog.csdn.net/jiangwei0910410003/article/details/48104581

Android中插件开发篇之----应用换肤原理解析 http://blog.csdn.net/jiangwei0910410003/article/details/47679843
插件开发的技术,当然本质还是动态加载-- https://github.com/Qihoo360/DroidPlugin

  将插件apk中资源添加到宿主apk中。这时候就需要用一种方式了,采用反射的机制:
通过调用AssetManager中的addAssetPath方法,我们可以将一个apk中的资源加载到Resources中,由于addAssetPath是隐藏api我们无法直接调用,所以只能通过反射,下面是它的声明,通过注释我们可以看出,传递的路径可以是zip文件也可以是一个资源目录,而apk就是一个zip,所以直接将apk的路径传给它,资源就加载到AssetManager中了,然后再通过AssetManager来创建一个新的Resources对象,这个对象就是我们可以使用的apk中的资源了。
  应用换肤的原理,核心技术就是:如何加载插件Apk中的资源。
  加载会有两种方式:
1、使用反射机制修改类加载器
2、使用代理的方式
  类加载器是符合双亲委派机制的。
PathClassLoader和DexClassLoader类加载器的父类BaseDexClassloader
  在使用反射机制来动态加载Activity的时候,有两个思路:
1>、替换LoadApk类中的mClassLoader变量的值,将我们动态加载类DexClassLoader设置为mClassLoader的值
2>、合并系统默认加载器PathClassLoader和动态加载器DexClassLoader中的dexElements数组
这两个的思路原理都是一样的:就是让我们动态加载进来的Activity能够具备正常的启动流程和生命周期。
  插件两种方式的比较
第一种方式:使用反射机制来实现
优点:可以不用太多的关心插件中的Activity的生命周期方法,因为他加载进来之后就是一个真正意义上的Activity了
缺点:需要在宿主工程中进行声明,如果插件中的Activity多的话,那么就不灵活了。
第二种方式:使用代理机制来实现
优点:不需要在宿主工程中进行声明太多的Activity了,只需要有一个代理Activity的声明就可以了,很灵活
缺点:需要管理手动的去管理插件中Activity的生命周期方法,难度复杂。


Android免Root无侵入AOP框架Dexposed- http://blog.csdn.net/u010687392/article/details/48316051
 插件化开发—动态加载技术加载已安装和未安装的apk- http://blog.csdn.net/u010687392/article/details/47121729
使用动态加载技术时,一般需要用到这两个类加载器:
  PathClassLoader - 只能加载已经安装的apk,即/data/app目录下的apk。
  DexClassLoader  - 能加载手机中未安装的apk、jar、dex,只要能在找到对应的路径。
优雅的App完全退出方案(没有任何内存泄漏隐患)- http://blog.csdn.net/u010687392/article/details/46879081
APP中一种在Java层实现的简单守护进程方式- http://blog.csdn.net/hejjunlin/article/details/52779986


其实你不知道MultiDex到底有多坑- http://www.open-open.com/lib/view/open1452264136714.html?ref=myread

Android高级之十三讲-HotFix、热加载和增量更新- http://blog.csdn.net/reboot123/article/details/53641127

你可能感兴趣的:(Android APP增量升级及插件化实现方式)