如今市场上有很多热更新的第三方,我使用的是阿里的阿里百川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啊,混淆啥的。
注意:
权限似乎还要加一个
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包删除即可。