阿里热修复-sophix的使用
集成方式:https://help.aliyun.com/document_detail/53238.html?spm=5176.doc53247.6.545.1ZfT5C (阿里百川文档没有3.0,所以在此看的集成方式,创建应用后没看到RSA密钥,所以需要在下面阿里百川链接中中查看)
然后在阿里百川获取需要填写的appkey== http://console.baichuan.taobao.com/applications.htm
如下:点击阿里百川HotFix进入应用管理就行了
集成代码如下:
apply plugin: 'com.android.application' android { signingConfigs { sign { keyAlias 'ts' keyPassword '123456' storeFile file('C:/Users/huangyihui/Desktop/ts_sing.jks') storePassword '123456' } } compileSdkVersion 26 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.sophixtest" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.sign } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } } //第一步:添加maven仓库地址: repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:26.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' //第二步:添加gradle坐标版本依赖: compile 'com.aliyun.ams:alicloud-android-hotfix:3.0.3' }
添加权限与配置:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sophixtest"> <!--热修复需要的权限: READ_EXTERNAL_STORAGE/ACCESS_WIFI_STATE权限属于Dangerous Permissions,自行做好android6.0以上的运行时权限获取--> <!-- 网络权限 --> <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 android:allowBackup="true" android:name=".MyApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--添加如下配置:--> <meta-data android:name="com.taobao.android.hotfix.IDSECRET" android:value="118052-1" /> <meta-data android:name="com.taobao.android.hotfix.APPSECRET" android:value="2cb47373ef11d16ecbc75611041ec1c3" /> <meta-data android:name="com.taobao.android.hotfix.RSASECRET" android:value="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCV45IQ/hQRdDX8+zIjzbnaVgJkmX+Tyn4K6LXftt6h9+D0VKbotx69o7CN+lj1P/aaz1jnUeuNXf4U50Txt0kjPBmLFvVHt8ddWX001sgtmWjMb9Q6xocMVxoLp+1Vg7SepK+puOIX78k0UwHaSXZXRA5tg2aY6+H5hsBX9bEboY6QSu8NIk3jGVzz8SEy9xfJxmrUGf6bgUr5Uhkjde2hr/eGbNUWv14yjimN1z2k1eee7BQpSZVg50nmA8Utb5FcmF3xMQDUDko1AcYyZ/TSFSarzzF3vaERrBF9kAlxZ6hEq/J3TL4y5sv+d+BtJM/WCYkISaFJRWbbckOZqBE1AgMBAAECggEATGHEzJ39sgtLe9iya2ZqAGZ2H7fNOI4m/v4puJBjEZzU6Q2+ZLb0lmU1EpTyAkCPNcLWJkMry0WLtjFIg/kH70mwJp4TbnGrydlRobyWFA6qRgvy1eTXayVz41625i4QvAtmbRIHPXV3Tg/C0O9AvCW1SH9+qA0Egfj2SZytnUtGJ8QB3jhitvNmX9Iw05Ip6Hn2prF/8hWWWxbwE4n8qXSq0Nf4g/QB0BSvpvNya+biMQElP9m3vLb8ENrCg93CVRy0soJFqEs4Tlsrgr+IDlqLqEoAwKcF11gXRipPXUcXCz/XOXu9cw2Nx+T/GPlEmWQSNrwO5HUH8zPZoArX/QKBgQDLQF8vUSBHVykG3QbthXtJMDm7EmU+uA1BRMX2Q7BGIrhaus4A/ZSrHtuPJWN+E/4NN/jwdYI7/muqj1SKCCvNyDc7Tnb9KygpKwqay2PSaIXfV/PW2tQSq7GRtZQUtEtUninDA8hd0+FrJXLQEGgDFquiUkJTfKkRHeugJQobFwKBgQC8yeYEoQA7fRr/yoxXnV0K0lXkwfFJIdxMew4SCY4zl6O2ihdFg/rFExSjMf8lzb37WUWtmC0OagcaXHcr4v7dwAiKYIF9GQNv0a7LU07la4J+ItrVF7p6v8089dV6wV593l3ssO6mRe6o0m/bliP8iTasRZdJAxqz8iCNdO91kwKBgQC36im3QSt6Im5nXX01VEF4uoCivESM+jJUSwzuh9VrwWMcBkj+MHdkWGnIH8blgOWzxGAoBcywyMlX7pZKyJYKgQ8pRRj6gSC4D9BqvXw4Goh4zrdARYb81gu5k5rJGVPI381eP4ABFwa005AOoanckZkBKnoF3ZmGeZKKuLlqRQKBgCUTpdgM4qXMSSwpVGy0nBxO+M2HhWKugryGglnqhIH/awijkDR32h0wRSJT5F9BS+l8O+H+/AJTsndr53+4AgP8/fBnSacO7Yzdam3GO7104tjw8XdeRKJs3tr1EOsd5PflXx7oFMaU/20qfwtqLkEflZw5wp91O55RlDET4R9/AoGATeQky3Y7tG5OWUtso4DIoAZyM/A60NzKYPnPNqoZ/VQ8GYW0h3E4c2mQ+JtsV4gv1aVO0FpxEHgvkOJtKPsNNU/pTcv60o/fN09IfLWbNX6ejq3PXjBH6QPTleVRPcPvRS4QG0Abz8dPeghU3ij6HdRT9o5IGVeJ02qJiiAds30=" /> </application> </manifest>
第三步,初始化:
public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); SophixManager.getInstance().setContext(this) .setAppVersion(BuildConfig.VERSION_NAME) .setAesKey(null) .setEnableDebug(true) .setPatchLoadStatusStub(new PatchLoadStatusListener() { @Override public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) { Log.i("code","mode = "+mode+"info = "+ info); // 补丁加载回调通知 if (code == PatchStatus.CODE_LOAD_SUCCESS) { // 表明补丁加载成功 Log.e("code","表明补丁加载成功"); } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) { // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启; // 建议: 用户可以监听进入后台事件, 然后应用自杀 Log.e("code","用户可以监听进入后台事件, 然后应用自杀"); } else if (code == PatchStatus.CODE_LOAD_FAIL) { // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载 // SophixManager.getInstance().cleanPatches(); Log.e("code","内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载"); } else { // 其它错误信息, 查看PatchStatus类说明 Log.e("code"," 其它错误信息, 查看PatchStatus类说明"); } } }).initialize(); SophixManager.getInstance().queryAndLoadNewPatch(); } }
到这里集成就ok了,此时你先打个有bug的包安装在手机上,然后再打个修复好的包,接下来就需要将这两个包进行对比,生成补丁了
补丁工具地址:https://help.aliyun.com/document_detail/53239.html?spm=5176.doc53238.6.550.7cB49v
解压后,打开SophixPatchTool.exe 生成补丁
然后在阿里百川的控制台界面上传补丁就行了,不过需要注意补丁版本与应用版本的区别 上传后可以在右下方看到推送情况