美文网首页
Android热修复—阿里的新一代热修复技术Sophix

Android热修复—阿里的新一代热修复技术Sophix

作者: Shawpoo的 | 来源:发表于2017-08-13 17:23 被阅读224次

转载请注明出处:http://www.jianshu.com/p/d9201733f3b4
本文出自Shawpoo的简书
我的博客:CSDN博客

前言

热修复作为当下热门的技术,在业界内比较著名的有阿里的AndFix、Dexposed,腾讯QQ空间的超级补丁技术和微信的Tinker。但是我对热修复基本没怎么研究过,由于最近一段时间了解到阿里发布了新一代热修复技术—Sophix。于是我决定折腾一波...

一、开通移动热修复服务

  • 1、注册阿里云账号,选择移动热修复服务


    选择移动热修复

选择之后需要开通此功能,点击立即开通即可:

开通热修复功能
  • 2、打开管理控制台,点击右上角创建APP

这时候返回Hotfix列表,会出现android和ios两个版本的APP。

ps:这里需要的是注意,一个是移动服务APP列表,一个是Hotfix列表,两个列表需要区分一下。

  • 3、RSA密钥(后面需要在AndroidManifest文件中配置)

点击Hoxfix列表android版本的app后面的管理即可查看基本信息:

二、接入热修复服务

1、添加依赖包

在项目的app.gradle中:

  • 1、添加maven仓库地址:
repositories {
   maven {
       url "http://maven.aliyun.com/nexus/content/repositories/releases"
   }
}

  • 2、添加gradle坐标版本依赖:

dependencies {
    compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.0'
}

ps:如果项目中也依赖其它阿里系SDK,可能会同时依赖了utdid这个SDK,为了避免冲突可以这样:

dependencies {
      compile ('com.aliyun.ams:alicloud-android-hotfix:3.1.0') {
           exclude(module:'alicloud-android-utdid')
      }
}

2、AndroidManifest中相关配置
  • 1、配置相关权限:
<!-- 网络权限 -->
<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"/>

  • 2、添加元数据:
<application 
    ...
    >
    <meta-data
      android:name="com.taobao.android.hotfix.IDSECRET"
      android:value="自己APP的App ID" />
    <meta-data
      android:name="com.taobao.android.hotfix.APPSECRET"
      android:value="自己APP的App Secret" />
    <meta-data
      android:name="com.taobao.android.hotfix.RSASECRET"
      android:value="自己APP的RSA密钥" />
</application>

3、初始化Sophix

initialize的调用应该尽可能的早,必须在Application.attachBaseContext()或者Application.onCreate()的最开始进行SDK初始化操作,否则极有可能导致崩溃。而查询服务器是否有可用补丁的操作可以在后面的任意地方。

这里我是继承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();
    }

}

三、生成补丁并上传到控制台

1、进行第一次运行并打包生成apk

为了简单测试,以一个TextView为例,且打包命名为first.apk


public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.textView);
        mTextView.setText("这是第一次运行的,");

    }
}

第一次运行效果.png
2、进行第二次运行并打包生成apk

这时候我们修改TextView的文字设置,且打包命名为second.apk

第二次运行效果.png
3、生成补丁
  • a 、生成补丁的话需要下载阿里的打补丁工具SophixPatchTool,然后分别选择两次打包生成的apk。
选择两次生成的apk

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

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

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

  • c、打开设置选项进行签名信息设置:
设置签名信息
  • d、点击Go生成补丁:
  • e、上传补丁

将生成的补丁文件sophix-patch.jar上传到控制台:

添加版本 上传补丁

4、调试并发布补丁

上传补丁后,查看补丁详情会发现,补丁状态是等待发布,阿里建议在正式发布前先使用hotfixdebug工具进行本地测试再发布,当然我们可以直接全量发布。

1、本地测试

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

使用调试工具

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

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

运行成功
2、全量发布补丁

选择全量发布,所有安装first.apk的用户就可以得到修复了,点击确认发布即可。

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

关于更多具体的发布流程,点击参考

完美实现热修复!

总结

Sophix的优点:

  • 1、补丁可以即时生效,不需要应用重启(我测试的过程中是因为本地已经存在了,所以需要重启APP);
  • 2、补丁包同样采用差量技术,生成的PATCH体积小,阿里采用自己的SophixPatchTool进行补丁生成,简单易用;
  • 3、对应用无侵入,几乎无性能损耗;
  • 4、傻瓜式接入。

缺点:

开始收费,不过有免费阈值,关于价格可以点击查看

点击下载Demo

参考资料

阿里云官网
Sophix官方文档
补丁调试
打补丁工具下载
调试工具apk下载
Android热修复技术选型

相关文章

  • Sophix及热修复原理介绍

    Sophix相关书籍 深入探索Android热修复技术原理这本书主要讲解了Android的热修复中的热部署,冷部署...

  • Android热修复—阿里的新一代热修复技术Sophix

    转载请注明出处:http://www.jianshu.com/p/d9201733f3b4本文出自Shawpoo的...

  • 阿里百川Hotfix热更新

    目前处于公测阶段的Android 热修复技术,学习下,以后应该会变成收费的。 阿里云Sophix 3.0.6现已上...

  • 阿里移动热修复Sophix试用

    今年Android领域热门技术之一是热修复技术,试用了一下阿里的Sophix,真心给阿里的技术点赞,接入成本非常低...

  • 阿里热修复Sophix使用

    学习热修复,觉得阿里的热修复Sophix使用挺简单的,是个入门学习热修复的好例子,于是按照文档自己写例子开始集成(...

  • Android热修复:Qfix方案的gradle实践

    Android热修复:Qfix方案的gradle实践 一、Android热修复方案的发展 Android热修复技术...

  • 阿里热修复——sophix

    集成前准备 1.登录、注册阿里云2.依次选择:产品→移动云→移动热修复→立即开通→管理控制台→创建app(填写信息...

  • 阿里Sophix热修复

    一、官方文档 首先,官方文档,官方文档,官方文档!Sophix 热修复 二、个人总结 1.本地调试成功,发布之后为...

  • 热修复

    业界首部安卓热修复宝典出炉,阿里技术大牛联袂推荐 下载地址: 深入理解Android热修复技术原理

  • 腾讯热修复Tinker初探

    热补丁修复框架,极大的方便了开发者热修复自己线上App的出现的bug和漏洞。之前已经尝试了阿里热修复SopHix和...

网友评论

      本文标题:Android热修复—阿里的新一代热修复技术Sophix

      本文链接:https://www.haomeiwen.com/subject/hrcsrxtx.html