当前位置: 首页 > news >正文

一文接入Android阿里Sophix热更新

        最近公司项目渐趋成熟,已经不需要经常更新版本,并且更新版本对客户的影响特别大,但是日常维护难免需要更新代码,因此热修复的技术,就比较迫切了。

        经过一段时间的对比,我们最终决定使用阿里的Sophix方案,因为它实在是太强大,而且接入及其简单。

        阿里网址如下:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

         应用申请这些因为过于简单,我这里就不说了,直接上代码

1、引入官方库,在app的build.gradle下,直接插入

 compile 'com.aliyun.ams:alicloud-android-hotfix:3.3.5'

2、心间自定义Application文件名为SophixStubApplication,继承自SophixApplication,代码如下:

public class SophixStubApplication extends SophixApplication {private final String TAG = "SophixStubApplication";// 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。@Keep@SophixEntry(自定义的Application.class)static class RealApplicationStub {}@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);
//         如果需要使用MultiDex,需要在此处调用。MultiDex.install(this);initSophix();}private void initSophix() {String appVersion = "0.0.0";try {appVersion = this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;} catch (Exception e) {}final SophixManager instance = SophixManager.getInstance();instance.setContext(this).setUsingEnhance() // 适配加固模式,如果app使用了加固则需要加上此方法.setAppVersion(appVersion).setSecretMetaData(null, null, null).setEnableDebug(true).setEnableFullLog().setPatchLoadStatusStub(new PatchLoadStatusListener() {@Overridepublic void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {if (code == PatchStatus.CODE_LOAD_SUCCESS) {Log.i(TAG, "sophix load patch success!");} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {// 如果需要在后台重启,建议此处用SharePreference保存状态。Log.i(TAG, "sophix preload patch success. restart app to make effect.");}}}).initialize();instance.queryAndLoadNewPatch();}
}

简单说一下这里,基本是固定格式,最重要的代码是

instance.queryAndLoadNewPatch();

顾名思义,查询并加载新的补丁。这个一定要调用的,不然无法加载补丁,记得把SophixStubApplication注册到AndroidManifest.xml中,举个例子:

 <applicationandroid:name="xxxxxx.SophixStubApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:maxAspectRatio="2.4"android:resizeableActivity="true"android:supportsRtl="true"android:theme="@style/AppTheme"android:usesCleartextTraffic="true"><meta-dataandroid:name="com.taobao.android.hotfix.IDSECRET"android:value="" /><meta-dataandroid:name="com.taobao.android.hotfix.APPSECRET"android:value="" /><meta-dataandroid:name="com.taobao.android.hotfix.RSASECRET"android:value="" /></application>

这样一套下来,阿里云热修复就已经成功集成到app中。

接再来再说说一些注意事项

1、不能热更新的场景

        1)、新增四大组件

        2)、修改了SophixStubApplication的内容

        3)、修改了AndroidManifest.xml的内容

        4)、其他配置文件

        除此之外,其他的一切皆可更新,包括.so文件

2、关于加固的app,如果采用了加固,去打补丁的时候一定要拿未加固前的apk去操作,否则无法加固

http://www.lryc.cn/news/211847.html

相关文章:

  • 【高阶数据结构】并查集和图
  • Git 提交时提示 GPG 签名错误
  • vite+vue3实现 tomcat 的本地部署
  • docker+playwright
  • php框架路由实现
  • 在CentOS 7中手工打造和运行xml文件配置的Servlet,然后使用curl、浏览器、telnet等三种工具各自测试
  • 单例模式.
  • 2023年MathorCup高校数学建模挑战赛大数据挑战赛赛题浅析
  • c++小惊喜——stringstream
  • ubuntu 18.04 编译安装flexpart 10.4(2023年) —— 筑梦之路
  • 深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models
  • HashMap的遍历方式 -- 好几次差点记不起来总结了一下
  • PostgreSQL 两表关联更新sql
  • R2R 的一些小tip
  • UML中类之间的六种主要关系
  • 机器学习-朴素贝叶斯之多项式模型
  • 下载的nginx证书转换成tomcat证书格式
  • 计算机毕业设计选题推荐-社区志愿者服务微信小程序/安卓APP-项目实战
  • ES6中数值扩展
  • sql-50练习题11-15
  • 【多线程面试题十九】、 公平锁与非公平锁是怎么实现的?
  • 3.4每日一题(变量可分离方程通解)
  • LabVIEW背景颜色设为和其他程序或图像中一样
  • 图表参考线,数据对比一目了然_三叠云
  • 【深度学习】Transformer、GPT、BERT、Seq2Seq什么区别?
  • 数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Javascript版)
  • Matlab | 基于二次谱提取地震数据的地震子波
  • 利用远程IO模块,轻松驾驭食品包装生产的自动化
  • 华为OD机考算法题:计算最大乘积
  • 用友 GRP-U8 存在sql注入漏洞复现