Android 热修复之阿里百川 快速集成
第一步:配置app目录下的build.gradle文件
在文件中加入:
repositories {
maven {
url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories"
}
}
然后添加:
compile 'com.taobao.android:alisdk-hotfix:2.0.9'
第二步:在AndroidManifest文件中添加权限
<!-- 网络权限 -->
<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.READ_EXTERNAL_STORAGE"/>
然后再application节点下添加
<meta-data
android:name="com.taobao.android.hotfix.IDSECRET"
android:value="App ID" />
<meta-data
android:name="com.taobao.android.hotfix.APPSECRET"
android:value="App Secret" />
<meta-data
android:name="com.taobao.android.hotfix.RSASECRET"
android:value="RSA密钥" />
第三步:在proguard-rules.pro文件中加入:
#基线包使用,生成mapping.txt
-printmapping mapping.txt
#生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
#修复后的项目使用,保证混淆结果一致
#-applymapping mapping.txt
#hotfix
-keep class com.taobao.sophix.**{*;}
-keep class com.ta.utdid2.device.**{*;}
第四步:创建MyApplication继承自Application,代码如下
public class MyApplication extends Application {
private static final String TAG = "LotteryApplication";
public static Context context;
@Override
public void onCreate() {
super.onCreate();
initHotfix();
}
private void initHotfix() {
String appVersion;
try {
appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
Log.d(TAG, appVersion);
} catch (Exception e) {
appVersion = "1.0.0";
}
SophixManager.getInstance().setContext(this)
.setAppVersion(appVersion)
.setAesKey(null)
//.setAesKey("0123456789123456")
.setEnableDebug(true)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
String msg = new StringBuilder("").append("Mode:").append(mode)
.append(" Code:").append(code)
.append(" Info:").append(info)
.append(" HandlePatchVersion:").append(handlePatchVersion).toString();
Log.d(TAG, msg);
}
}).initialize();
SophixManager.getInstance().queryAndLoadNewPatch();
}
}
到此,既可以开始测试了。生成一个apk,命名为app-old.apk,然后改动一下,生成app-new.apk,使用打包工具,生成补丁。接着下载测试工具到手机,按照官方文档一步一步操作即可。
下面说两个遇到的问题:
1. public final static int CODE_ERR_NOTINIT = 2;
public final static String INFO_ERR_NOTINIT = "didn't initialize hotfix sdk or initialize fail.";
出现Code=2是因为没有调用initHotFix()方法
2. public final static int CODE_PATCH_INVAILD = 20;
public static final String INFO_PATCH_INVAILD = "patch invaild, as patch not exist or is dir or not a jar compress file.";
出现Code=20是因为使用本地补丁的时候没有找到正确的路径。
虽然现在阿里百川快要淘汰了,还是写一下,记录一下吧。取而代之的将是阿里云热修复