阿里热修复之Sophix

记录一下初次使用阿里热修复的集成步骤(虽然阿里的开发文档已经记录的很清楚了)

阿里集成文档:https://help.aliyun.com/document_detail/53240.html?spm=a2c4g.11186623.6.546.zq6lR7

集成准备

android studio集成方式

gradle远程仓库依赖, 打开项目找到app的build.gradle文件,添加如下配置:

添加maven仓库地址:

 
  
  1. repositories {
  2. maven {
  3. url "http://maven.aliyun.com/nexus/content/repositories/releases"
  4. }
  5. }

添加gradle坐标版本依赖:

 
  
  1. compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.0'

注意,若SDK集成过程中出现UTDID冲突,请参考:阿里云-移动云产品SDK UTDID冲突解决方案。

如若仓库访问失败, 那么用本地依赖的方式进行依赖, SDK下载见“1.5 客户端本地SDK及DEMO下载”节。

权限说明

<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"/>

READ_EXTERNAL_STORAGE权限属于Dangerous Permissions,仅调试工具获取外部补丁需要,不影响线上发布的补丁加载,调试时请自行做好android6.0以上的运行时权限获取。

配置AndroidManifest文件

AndroidManifest.xml中间的application节点下添加如下配置:

  1. data
  2. android:name="com.taobao.android.hotfix.IDSECRET"
  3. android:value="App ID" />
  4. data
  5. android:name="com.taobao.android.hotfix.APPSECRET"
  6. android:value="App Secret" />
  7. data
  8. android:name="com.taobao.android.hotfix.RSASECRET"
  9. android:value="RSA密钥" />

阿里热修复之Sophix_第1张图片

阿里热修复之Sophix_第2张图片

接入范例

这里继承Application,在onCreate()方法中进行初始化:

public class SophixApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        initSophix();
    }

    private void initSophix() {
        String appVersion;

        try {
            appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            appVersion = "1.0.0";
            e.printStackTrace();
        }

        // initialize最好放在attachBaseContext最前面
        SophixManager.getInstance().setContext(this)
                .setAppVersion(appVersion)
                .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) {
                            // 表明补丁加载成功
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后调用killProcessSafely自杀,以此加快应用补丁,详见1.3.2.3
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                        }
                    }
                }).initialize();
        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

}

生成补丁
生成补丁的话需要下载阿里的打补丁工具SophixPatchTool,然后分别选择两次打包生成的apk。

阿里热修复之Sophix_第3张图片

ps: 
旧包:<必填> 选择基线包路径(有问题的APK)。 
新包:<必填> 选择新包路径(修复过该问题APK)。 
日志:打开日志输出窗口。 
高级:展开高级选项。 
设置:配置其他信息。 
GO!:开始生成补丁。

  • 打开高级设置是否需要冷启动,本项为默认即可,无需设置

阿里热修复之Sophix_第4张图片

ps: 
强制冷启动:勾选的话强制生成补丁包为需要冷启动才能修复的格式。默认不选的话,工具会根据代码变更情况自动选择即时热替换或者冷启动修复。 
不比较资源:打补丁时不比较资源的变化。 
不比较SO库:打补丁时不比较SO库的变化。

  • 打开设置选项进行签名信息设置:

阿里热修复之Sophix_第5张图片

  • 点击Go生成补丁:
开始上传补丁
阿里热修复之Sophix_第6张图片
阿里热修复之Sophix_第7张图片

补丁文件名称规范:

  • Android:文件名必须为:sophix-patch.jar
  • 如何生成Android补丁文件,见文档Android生成Patch补丁

补丁状态:

  • 等待中:补丁上传成功,等待操作。
  • 已灰度:补丁正在进行部分设备灰度发布中。
  • 已发布:补丁已全量发布至所有设备。
  • 已停止:补丁发布行为已暂停,服务端停止下发补丁,客户端已经下载的补丁继续生效。

本地测试

HotFix提供了调试工具实现本地测试,方便您在正式发布前,在您的手机本地进行测试。步骤如下:

  • 下载安装HotFix 调试工具。
  • 使用HotFix 调试工具获取补丁;
  • Android调试工具使用说明。

填写包名,点击连接应用,然后扫描补丁详情中的二维码下载补丁。或者将补丁包放到手机sdcard,填写绝对路径也是可以的。

阿里热修复之Sophix_第8张图片

Mode:1 表示扫码模式, Code:12 表示应用当前已经有一个补丁, 所以新补丁不会立刻加载需要等下一次重启加载。(因为我已经下载过一次了)

这时候打开我们装上的first.apk发现并没有变,杀掉进程,重新进入,发现已经是我们想要的内容了。

阿里热修复之Sophix_第9张图片
本地测试之后没有问题就可以发布了


阿里热修复之Sophix_第10张图片

发布之后,重新启动APP,会发现可以内容已经变为我们想要的。(这个过程可能略有延迟)

阿里热修复之Sophix_第11张图片

混淆配置

 
  
  1. #基线包使用,生成mapping.txt
  2. -printmapping mapping.txt
  3. #生成的mapping.txt在app/buidl/outputs/mapping/release路径下,移动到/app路径下
  4. #修复后的项目使用,保证混淆结果一致
  5. #-applymapping mapping.txt
  6. #hotfix
  7. -keep class com.taobao.sophix.**{*;}
  8. -keep class com.ta.utdid2.device.**{*;}
  9. #防止inline
  10. -dontoptimize



阿里热修复之Sophix_第12张图片

发布之后,重新启动APP,会发现可以内容已经变为我们想要的。(这个过程可能略有延迟)

阿里热修复之Sophix_第13张图片

你可能感兴趣的:(热修复,sophix)