阿里热修复-sophix的使用

对比:http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.VYB5Gi&treeId=234&articleId=106002&docType=1

 

集成方式: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 生成补丁

然后在阿里百川的控制台界面上传补丁就行了,不过需要注意补丁版本与应用版本的区别     上传后可以在右下方看到推送情况

 

posted @ 2017-07-03 11:56  ts-android  阅读(1391)  评论(0编辑  收藏  举报