官方Demo已经是2.x版本的示例,相对较老,新版目前是3.2.3,而且提倡使用
稳健接入
方式
-
在阿里百川平台,申请账号和热修复的key
-
参照文档使用AS接入
-
project.gradle中引入maven地址(配置all project)
-
app.gradle中添加依赖
-
proguard-rules.pro配置混淆规则
#基线包使用,生成mapping.txt #-printmapping mapping.txt #生成的mapping.txt在app/build/outputs/mapping/release路径下,移动到/app路径下 #修复后的项目使用,保证混淆结果一致 -applymapping mapping.txt #hotfix -keep class com.taobao.sophix.**{*;} -keep class com.ta.utdid2.device.**{*;} #防止inline -dontoptimize -keep class in.zhiwei.aqi.AQIApplication{*;} -keepclassmembers class in.zhiwei.aqi.AQIApplication { public <init>(); } # 如果不使用android.support.annotation.Keep则需加上此行 -keep class in.zhiwei.aqi.SophixStubApplication$RealApplicationStub
**注意:**mapping文件,在生成base包的时候使用
-printmapping mapping.txt
这一行生效,仅在生成更新包的时候,要将
-appluymapping mapping.txt
这行生效。-
若有第三方的so库引用,可能需要在gradle中配置ndk{
abifliter 'armeabi','armeabi-v7a'等等
}类似的指定平台。
-
-
自定义Application继承SophixApplication,参照文档,仅仅需要配置key,rsa,id等,以及将MyRealApplication这个class指定为,项目真正的业务application
-
业务Application的onCreate配置需要的初始化。
-
AndroidManifest中的application指定的是 继承自SophixApplication的子类,而非业务application。注意这些类的混淆配置。
注意:使用sophix补丁工具的时候,注意在传入old、new的apk的时候,重新命名apk,每次最好关闭,重新打开工具,并选择apk路径,这样可以避免打补丁的失败。
或许是因为工具占用内存的缘故吧。
-
在base包中的某个合适的逻辑处,请求服务器的补丁查询。注意权限的问题(网络权限必备,读取sd权限,是调试工具需要,从服务器下载,若无必要可以不用这个权限)。
-
生成基类包发布出去后,修改需要紧急修复的代码,将base包生成的时候的mapping.txt复制放在app目录下,生成新包。
-
用阿里百川sophix的补丁工具,生成补丁
-
将补丁上传至后台,发布补丁,进入下一页,发布灰度,全量,然后在base包中触发请求补丁的逻辑时候,就会下载补丁包,并在下次冷启动后,生效。