Android三步集成阿里热修复——Sophix

简介: Android三步集成阿里热修复——Sophix

准备工作

打开阿里云

找到产品

找到移动热修复

创建APP(在右上角)

然后会有app id 等信息,配置会用到(复制的时候注意会有空格)

官方集成文档


1、配置

添加maven仓库地址:

repositories {
   maven {
       url "http://maven.aliyun.com/nexus/content/repositories/releases"
   }
}

添加gradle坐标版本依赖:

compile 'com.aliyun.ams:alicloud-android-hotfix:3.2.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"/>

注意 READ_EXTERNAL_STORAGE在6.0+需要动态获取的哦~


在AndroidManifest.xml中间的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密钥" />

Application中初始化

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // initialize最好放在attachBaseContext最前面,初始化直接在Application类里面,切勿封装到其他类
        SophixManager.getInstance().setContext(this)
                .setAppVersion(getVersionName())
                .setAesKey(null)
                .setEnableDebug(true)//正式发布该参数必须为false
                .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
                            //SophixManager.getInstance().killProcessSafely();
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                        }
                    }
                }).initialize();
        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻,如onCreate中
        SophixManager.getInstance().queryAndLoadNewPatch();
    }
    public String getVersionName() {
        try {
            return this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
}

以上配置无需动脑,直接从集成文档中复制过来就ok的~


别忘了引用你的Application类


2、代码

这一步就是模拟修复bug


就很简单设置“第一次运行”

image.png


运行效果

image.png


这时候签名打一个包,demo_1.apk,假装这是一个出bug的apk

完成之后,修改代码并变成红色,假装修复

image.png


运行效果

image.png


此时再打一个包,demo_2.apk  


3、发布

好了,到第三步了,也是比较关键的地方了,但是不要怕,依然没有难度


大概原理:在第二步中我们打了两个安装包,demo_1.apk 和 demo_2.apk,就是比较这两个apk,差异的部分生成补丁包,然后控制台去控制下发、拉取、加载等操作。


所以,现在就需要用到补丁包,需要这个工具SophixPatchTool,以windows为例,下载之后解压,找到并打开SophixPatchTool.exe,然后选择旧包、新包

image.png


设置里面选择补丁包的输出路径

image.png



高级

image.png


点击 GO 开始生成补丁包

image.png



这里可能会遇到apk加固而无法生成补丁包的情况,加固前先生成补丁,然后再加固,加固了的apk是可以应用上补丁的。


打开输出路径

image.png

可以看到多了一个sophix-patch.jar文件


控制台先添加版本,比如1.0.0

然后查看详情中,选择上传补丁,就是刚才的jar文件

上传之后就可以发布了

image.png

比如现在手机装的是demo_1.apk,发布之后就可以重新打开,再运行就是demo_2.apk的效果了


为什么需要重新打开呢

在生成补丁包的时候,有一个高级选项,我没有勾选强制冷启动,Sophix就会根据情况自己去选择冷启动生效还是及时生效。


哦对了,还有个测试,调试补丁

也超简单的,下载调试工具,是个apk,打开如下图


image.png


操作:

第一个是输入包名,然后点击连接,连接成功的话会在下面通知内容中显示success

然后扫描二维码,就是发布时那个二维码

然后就是输入绝对路径了,就是补丁包在手机的路径

然后点击应用就ok了,通知中会显示-1,表示本地补丁,2 表示本地补丁模式, 1 表示加载成功


总结

整套操作下来基本没有难度,不过要用好的话还是需要把官方文档好好研究一下,比如能不能直接加一个Activity啊、补丁包发错了怎么办啊、补丁怎么找不到啊等等,其实都有对应的解决方案,实在解决不了也可以提交一个工单,我这个集成下来十分钟左右就搞定了,当然,官方文档我也研究了好几遍。。

目录
相关文章
|
2天前
|
人工智能 达摩院 并行计算
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
VideoRefer 是浙江大学与阿里达摩学院联合推出的视频对象感知与推理技术,支持细粒度视频对象理解、复杂关系分析及多模态交互,适用于视频剪辑、教育、安防等多个领域。
38 17
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
|
5月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
401 1
|
3月前
|
消息中间件 Java 数据库
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
这里 借助 Seata 集成 RocketMQ 事务消息的 新功能,介绍一下一个新遇到的面试题:如果如何实现 **强弱一致性 结合**的分布式事务?
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
|
3月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
155 1
|
5月前
|
机器学习/深度学习 运维 算法
【阿里天池-医学影像报告异常检测】3 机器学习模型训练及集成学习Baseline开源
本文介绍了一个基于XGBoost、LightGBM和逻辑回归的集成学习模型,用于医学影像报告异常检测任务,并公开了达到0.83+准确率的基线代码。
85 9
|
4月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
176 0
|
5月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
112 0
|
5月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
全面解析TensorFlow Lite:从模型转换到Android应用集成,教你如何在移动设备上轻松部署轻量级机器学习模型,实现高效本地推理
【8月更文挑战第31天】本文通过技术综述介绍了如何使用TensorFlow Lite将机器学习模型部署至移动设备。从创建、训练模型开始,详细演示了模型向TensorFlow Lite格式的转换过程,并指导如何在Android应用中集成该模型以实现预测功能,突显了TensorFlow Lite在资源受限环境中的优势及灵活性。
452 0
|
6月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
334 6
|
7月前
|
文字识别 Android开发 C++
Tesseract OCR集成Android Studio实现OCR识别
Tesseract OCR集成Android Studio实现OCR识别
355 0