• androidstudio实现增量更新步骤


     本文demo和参考例子参考-传送  门:http://blog.csdn.net/duguang77/article/details/17676797

    一.增量更新优点:节省客户端和服务器端流量

      增量更新和热修复是不同的两个技术

     学习要求:学会jni相关操作,例如androidstudio如何生成和应用.so文件

     这里有.so文件的生成和应用的简单介绍  http://www.cnblogs.com/mrszhou/p/6859137.html

    二.增量更新原理-APK的查分合成

      差分包:比如old.apk(大小是4M)要升级到new.apk(大小是10M),在服务器(或者手动生成old-new.patch(差分包的大小是6M)

           开源工具

        bsdiff下载http://www.daemonology.net/bsdiff/ 
        bzip2下载http://www.bzip.org/downloads.html 

         bsdiff:  

         bsdiff.c      二进制比较代码生成差分包.patch用的  在命令窗口生成patch用的命令 ./bsdiff old.apk new.apk old-to-new.patch

         bspatch.c   二进制文件合成代码合成新apk用的   在命令窗口合成新apk用的命令./bspatch old.apk new2.apk old-to-new.patch

         bzip2:放到客户端的jni包里面的文件有以下13个:

           blocksort.c   bzip2.c   bzip2recover.c  bzlib_private.h  bzlib.c  bzlib.h  compress.c  crctable.c   decompress.c   dlltest.c  huffman.c  randtable.c   spewG.c  

                在生成.so文件的时候可能报错:Error:(70) multiple definition of `main'

             这时候把报错的main函数的名字改成main1,main2等等就行了

      1.在服务端生成新旧apk的差分包

     (注意:要生成每个旧版本和新版本的差分包,根据客户端传过来该客户端当前的VersionCode来查找服务端是否有该版本和新客户端的差分包,

      如果没有的话就生成差分包)

      例如:

         1.0->4.0  生成1.0和4.0的差分包;

         2.0->4.0  生成2.0到4.0的差分包

      2.在客户端使用已经安装的旧版apk,使用已安装的旧版apk和old-new.patch合成新apk

      3.对比合成的apk的签名、md5是否一样,一样的话就能提示安装

    三.客户端实现

      服务端上面传送门有demo例子下载

      客户端:按照http://www.cnblogs.com/mrszhou/p/6859137.html这里生成jni包内的example.h文件,再复制.h文件到jni包里面,改文件类型为example.c   文件

     

     并在该文件的native函数内编写

      

    JNIEXPORT jint JNICALL Java_service_update_app_myzenglianupdate_MainActivity_zengliangu
      (JNIEnv* env,object othis, jstring argv1, jstring argv2, jstring argv3){
       char ** argv;
        int loopVar,result;
    
        //__android_log_print(ANDROID_LOG_INFO, "bspatch.c", "开始打包之。。。。。。");
        argv = (char**) malloc(4 * sizeof(char*));
        for (loopVar = 0; loopVar < 4; loopVar++) {
            argv[loopVar] = (char*) malloc(100 * sizeof(char));
        }
        argv[0] = "bspatch";
        argv[1] = (*env)->GetStringUTFChars(env, argv1, 0);
        argv[2] = (*env)->GetStringUTFChars(env, argv2, 0);
        argv[3] = (*env)->GetStringUTFChars(env, argv3, 0);
    
        result=bspatch(argv);
    
        //Important:释放内存,防止内存泄露
        (*env)->ReleaseStringUTFChars(env, argv1, argv[1]);
        (*env)->ReleaseStringUTFChars(env, argv2, argv[2]);
        (*env)->ReleaseStringUTFChars(env, argv3, argv[3]);
        return result;
    
      };

      然后在app/src/mian内新建jniLibs包,在包生成的.so文件拖进去

     

      

     这些步骤是在前人的例子里自己亲自学习过程中,.so文件的生成和NDK的版本,报错很多,基本生成.so文件后面的就简单很多

     

  • 相关阅读:
    微服务安全(二)OAuth 2.0
    微服务安全(一)
    Spring Security 学习+实践
    Dubbo 学习(二)服务注册与发现
    Dubbo 学习(一)
    Spring Cloud Hystrix 学习(三)请求合并
    Spring Cloud Hystrix 学习(二)熔断与降级
    Spring Cloud Hystrix 学习(一)
    Spring Cloud Gateway 学习+实践
    Spring Cloud Zuul 学习+实践
  • 原文地址:https://www.cnblogs.com/mrszhou/p/6859176.html
Copyright © 2020-2023  润新知