阿里百川HotFix解决方案使用体验

最近,我们的应用出了一个兼容性的小bug,但是解决这个bug的新版本却发布了快一个月,这其中有种种问题导致新的版本发布不断拖后,为了解决快速解决线上bug这个问题,查阅了一下资料,什么androidfix,还有什么其他的,这个就不啰嗦了,大家可以参考这个文章了解一下。

Android热修补技术选型

过了一个G20,偶尔逛了一下阿里百川,发现百川发布的一个sdk,于是怀抱着期待来到这里分享一下使用阿里百川的hotfix解决方案中的一些梗。

首先分享一下阿里百川hotfix解决方案,这个sdk是基于andfix方案的一个扩展,对于andfix进行一些优化,极大的方便了我们的使用,如果顺利的话可能几个小时就可以解决热修补的问题,当然先关机型的不支持也再所难免,谁让android这么开放呢!

目前这个SDK还在公测中,或许会有一些bug,但是总比自己费力的构造要好的多,所以,果断选择。
SDK指南如下:阿里百川hotfix

首先,你要成为阿里百川的开发者,成为开发者以后创建你的应用,即可实现后续集成步骤。
Android studio 集成过程中,需要注意阿里系的UTDID这个东西,经常使用友盟或者阿里的东西都知道,这个是个梗。
在添加依赖过程中,使用gradle的同学们,你可以直接在app目录下的build.gradle 文件添加
(这里一定要注意是app目录下的哦)

repositories {
        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/public/"
        }
}

然后就要说一个梗了,官方的介绍是这样的
官方介绍
然而事实并不是你注释了compile utdid 的语句就能解决的,如果只compile hotfix,还是会自动依赖utdid,正确的姿势是这样的

compile ('com.alibaba.sdk.android.plugins:alisdk-hotfix:1.0.0.3'){
//        exclude module:"alisdk-utdid"
        transitive false
    }
//这里exclude 这一句和transitive这一句可以二选一

姿势正确给个满分!

然后你按照官网的要求配置Manifest节点和权限就可以初始化了
配置appsecret和rsasecret

<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="your-app-secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="your-rsa-secret" />

添加权限

<! -- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<! -- 存储读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

下一步,就是在application 中自定义了
这里我将官方的代码一气呵成,不明白看注释。

//初始化
HotFixManager hotFixManager=HotFixManager.getInstance().initialize(application,appVersion,appId, newPatchListener);
/*
application: Application上下文context
appVersion: 应用的版本号
appId: 百川上应用的唯一标识。如何获取请查询获取SDK配置信息
newPatchListener: 新patch的回调接口,若不执行任何动作,可为null
*/
//请求最新的patch
hotFixManager.queryNewHotPatch();


//注意:下面这个部分在oncreate外面
NewPatchListener mNewPatchListener = new NewPatchListener() {
        @Override
        public void handlePatch(int patchVersion) {
            // TODO do something
            Toast.makeText(MainApplication.this, "请重启应用更新补丁", Toast.LENGTH_SHORT).show();
        }
    };
    /*如果客户端已经有一个patch包在运行,则下一个patch不会立即生效,需要重启应用生效。所以此时需要进行处理,比如提醒用户重启应用或者开发者进行后台手动杀进程重启等操作。
    */

混淆设置如下:

#HotFix
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.**{
    *;
}
-keep class com.taobao.hotfix.aidl.**{*;}
-keep class com.ta.utdid2.device.**{*;}
-keep class com.taobao.hotfix.HotFixManager{
    public *;
}

到了这里,你已经完成了所有的集成工作。下面就要看怎么制作补丁了,以前使用andfix的同学可以滤过了。
首先,你要确定你的JDk版本,JDK版本在1.7以上才会正确使用哦。
这里,mac用户打开你的终端,WIN用户敲开你的CMD工具。OK let`s go.

关于生成PATCH补丁的问题,需要大家细心细心,因为目前的补丁生成确实是不是很方便。另外一定要保证输出路径是空的,因为有可能会删除该路径文件哦
执行的命令如下:

java -jar alisdk-hotfix-android-pack-tools.jar PATCH srcAPK fixedAPK outPatch signInfo outLog

/*srcAPK:填写本地的原始APK(有问题的APK)的本地路径,如果文件找不到会报错
fixedAPK:已经修复过该问题的APK
outPatch:输出patch的路径
signInfo:本地的签名配置属性文件,可选,不输入或者不正确则不做签名
outLog:输出日志的目录,可以不填写,默认为控制台输出
*/

这里是官方的一些解释:但是,为了你能够快速顺利的完成PATCH,请尽量完整参数,如果报错说什么参数

Exception in thread “main” java.lang.reflect.InvocationTargetException
at ···

大部分情况路径问题或者是签名文件的路径问题,比如路径多了个空格,或者左斜杠和右斜杠的问题等等,都要注意细心检查咯。另外要告诉大家,尽量不要将输出文件的地址(srcAPK fixedAPK)和输入文件的地址(outPatch )做成同一个路径进行处理,否则运行错误可能导致目录文件丢失哦。
签名配置文件为XXXXXXX.keyinfo,
store.file=yourpath
store.password=yourpassword
key.alias=yourkeyalias
key.password=yourkeypassword

工具异常说明

异常提示 说明
SRC APK FILE IS NOT FOUND
旧的APK没有找到,最大的可能是填写的路径不对
FIXED APK FILE IS NOT FOUND
修复了BUG的APK没有找到,最大可能是填写的路径不对
PATCH OUTPUT PATH IS NOT FOUND
生成PATCH的工作目录不存在
WORKING PATCH MUST BE A DIFFERENT PATH WITH APK
WORKING目录必须一个全新存在且没有文件的目录,里边放APK或者PATCH 工具会被在完成工作后清除

有问题可以留言交流哦。

参考阿里百川hotfixSDK说明

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值