Android 热更新 的使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_26710701/article/details/63250643

如今市场上有很多热更新的第三方,我使用的是阿里的阿里百川hotfix2.0,对于各种热更新的优劣我就不介绍了,网上很多,例如:http://www.jianshu.com/p/2d0f70e30111

直接进入正题:
阿里百川hotfix入口:
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.jIXDqS&treeId=234&articleId=105517&docType=1

在使用之前,最好先看下文档介绍神马的,很有帮助的!

好的,开始吧。

首先,需要下载sdk,打包工具,和 调试工具(当然,最好也把demo下载下来,不过,我当时下载的demo中集成的是hotfix1.0的sdk,所以里面的有些代码不太一样,但是影响不大)

这里写图片描述

这里的 sdk 打包工具 和 调试工具,一定要版本对应,否则会热更新失败。(我当时,sdk和打包工具都是用的2.0,但是调试工具下了个1.0的 结果就蒙逼了。)

说明一下:这里的调试工具仅仅是为了调试方便测试本地补丁而使用的。

接着就很简单了,按照Android接入说明的三个步骤弄就行了:
使用的studio,别跟我说你还用的eclipse!!(如果真的用的eclipse,按照文档上弄吧,最好还是换了)

1.集成sdk,可以用远程依赖,也可以本地依赖,我是把sdk下载下来放到lib包里做了本地依赖。
这里写图片描述

注意里面有个arr包,这个与jar包差不多,只不过里面多了写资源文件,但是使用studio时候,一定要在build.gradle中配置上:

repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
    compile 'com.squareup.okhttp3:okhttp:3.6.0'
    compile 'io.reactivex.rxjava2:rxjava:2.0.7'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    //热更新
    compile files('libs/alicloud-android-utils-1.0.1.jar')
    compile files('libs/utdid4all-1.1.5.3_proguard.jar')
    compile(name:'alisdk-hotfix-2.0.0', ext:'aar')
}

2.接着就是权限啊,AndroidManifest啊,混淆啥的。
注意:
权限似乎还要加一个<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
meta-data 一定要配置在studio的application里面:(配置在外面的面壁去,我已经面壁过了)
这里写图片描述
meta-data 有三个,分别是App ID,App Secret,RSA密钥。这三个东东是在阿里百川后台创建应用后分配给你的:
这里写图片描述

3.SDK接入:
官方建议在application中init初始化。

public class MyApp extends Application {
    private static final String TAG = "MyApp";
    private static Context context;
    @Override
    public void onCreate() {
        super.onCreate();
        context = this;
        String versionName = MySystemUtils.getVersionName(context);
        int versionCode = MySystemUtils.getVersionCode(context);
        SophixManager.getInstance().setContext(this)
                .setAppVersion(versionName)
                .setAesKey(null)
                .setEnableDebug(true)
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onload(final int mode, final int code, final String info, final int handlePatchVersion) {
                        // 补丁加载回调通知
                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                            Log.d(TAG, "onload() returned: " + "表明补丁加载成功");
                            // 表明补丁加载成功
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            Log.d(TAG, "onload() returned: " + "表明新补丁生效需要重启. 开发者可提示用户或者强制重启;");
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后应用自杀
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            Log.d(TAG, "onload() returned: " + "内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载");
                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
//                             SophixManager.getInstance().cleanPatches();
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                            Log.d(TAG, "onload() returned: " + "其它错误信息, 查看PatchStatus类说明");
                        }
                    }
                }).initialize();
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

    public static Context getContext() {
        return context;
    }
}

这样,所有的准备工作就做完了,接下来就是开始调试是否集成成功了。
但是为了方便调试,我们需要把app**正式签名打包两次,一次是模拟有bug的包(**old.apk),一次是模拟修复bug后的包(new.apk)

至于怎么正式签名打包,我就不多少了,studio可以在gradle中配置,每次debug时候使用签名(怎么弄?看这里—-

如何生成补丁包:(2.0已经有可视化工具了,1.0请自动去命令行。。。)
之前在官网上下载的包中有一个打包工具:SophixPatchTool_2.0.0_win.zip
解压后,打开SophixPatchTool.exe

这里写图片描述

第一次使用,可能需要配置签名文件:
这里写图片描述

配置完签名,新包,旧包后,GO! 就会生成一个 baichuan-hotfix-patch.jar 文件
(注意,如果是要上传到阿里百川后台,不要修改名字!)

接着你可以先本地调试:使用调试工具—一个apk,安装到手机上,基本界面是这样的

这里写图片描述

第一个输入你的项目包名,然后打开项目,点击连接应用,如果能连上就ok了
第二个edittext框输入本地的补丁包的路径,即上面生成的 baichuan-hotfix-patch.jar
然后点击应用本地补丁 返回1则补丁正确装载 (具体返回码可以在项目里 ctrl+右键 点击PatchStatus类查看)

如果是线上调试即 将补丁发送到阿里百川后台进行调试的话:
也很简单:创建应用—点击管理—新增版本–输入版本号(versionName)—查看详情—上传补丁
这里写图片描述

注意:1.补丁的名字不能该必须是baichuan-hotfix-patch.jar 且一定要对应版本号
2.注意选择All Files才会显示出来 补丁文件

然后进入补丁详情 选择发布 即可。

如果写的不对,请指出告诉我,如果觉得写的不错,请谦虚的点下赞。如果有什么问题,可以留言。。。。

———————————————————————————————————
2017-03-23更新:
如果项目中使用的有支付宝的sdk(alipaySdk-20161009.jar),此包会与热更新三个包中的 utdid4all-1.1 .5.3_proguard.jar包冲突 编译时就会出现大量error:

这里写图片描述

只需要将utdid4all-x.x.x.x_proguard.jar包删除即可。

展开阅读全文

没有更多推荐了,返回首页