Android Mobile Hotfix(阿里云——移动热修复接入)

一步步教你实现Android HotFix热更新 这篇文章是手把手教你如何实现热更新的,对于热更新的原理这里不涉及 实现热更新技术要点如下: (1)如何防止类被打上CLASS_ISPREVERIFIED的标志 (2)如何制作补丁包 (3)如何动态加载需要修复的类 阅读详情

首先你需要注册并登陆 阿里云移动研发平台,查看官方文档,下载SDK等,集成过程并不复杂。本文主要记录接入流程跟遇到的问题

什么是热修复

热修复,是一种使用补丁来更新修复的手段。不需要通过重新发布App,下载安装等一系列繁琐的过程。

热修复原理

总结参考文档,修复框架很多,但热修复框架的核心技术主要有三类

  • 代码修复
  • 资源修复
  • 动态链接库修复

代码修复主要有三个方案,分别是底层替换方案、类加载方案和Instant Run方案,具体请参考以下链接

参考文档:

https://www.jianshu.com/p/a4bf979cce3b(Android热更新之初探)

https://blog.youkuaiyun.com/itachi85/article/details/79522200(Android热修复原理)

插件化开发

将整个app拆分成多个模块,每个模块都是一个app,这些模块包括一个宿主和多个插件。(解决 65535 问题)

插件化Small方案:http://code.wequick.net/Small/cn/quickstart

组件化开发

将整个app拆分成多个模块,每个模块都是一个组件(Module),也就是lib。项目功能需求比较复杂的时候,或者多人开发的时候,非常不错的一种方案。便于开发,调试。代码逻辑结构清晰,便于代码的维护,重用,降低耦合度。

参考文档:

https://www.jianshu.com/p/704cac3eb13d(Android 插件化和热修复知识梳理)

https://blog.youkuaiyun.com/guiying712/article/details/55213884(Android组件化方案)

https://blog.youkuaiyun.com/u012513972/article/details/78269288(Android热更新技术的研究与实现)

记录部分学习内容,下面主要介绍 Sophix接入以及简单使用:

 官方文档:https://help.aliyun.com/product/51340.html?spm=5176.131995.673114.doc1.13e969fd9JwVdh

Android Studio 集成(快速接入)

第一步,添加依赖配置

这里注意是都在 app的build.gradle文件下,添加配置

repositories {
        mavenLocal()
        //阿里云仓库
        maven {
            url "http://maven.aliyun.com/nexus/content/repositories/releases"
        }
        mavenCentral()
        jcenter()
        flatDir {
            dirs 'libs'
        }
    }

添加依赖:

implementation 'com.aliyun.ams:alicloud-android-hotfix:3.2.4'

第二步,AndroidManifest.xml文件 添加权限

    <!-- 网络权限 -->
    <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" />

在Android 6.0及以上,需要对READ_EXTERNAL_STORAGE权限做处理

还有data数据配置,我是在代码中进行设置的,推荐使用。避免别人解析破解

第三步,初始化处理

/**
 * Sophix入口类,专门用于初始化Sophix,稳健接入方式
 * <p>
 * Sophix入口类,专门用于初始化Sophix,不应包含任何业务逻辑。
 * 此类必须继承自SophixApplication,onCreate方法不需要实现。
 * 此类不应与项目中的其他类有任何互相调用的逻辑,必须完全做到隔离。
 * AndroidManifest中设置application为此类,而SophixEntry中设为原先Application类。
 * 注意原先Application里不需要再重复初始化Sophix,并且需要避免混淆原先Application类。
 */
public class SophixStubApplication extends SophixApplication {

    private static final String TAG = "SophixStubApplication";

    // 此处SophixEntry应指定真正的Application,并且保证RealApplicationStub类名不被混淆。
    @Keep
    @SophixEntry(MyApplication.class)
    static class RealApplicationStub {

    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        //如果需要使用MultiDex,需要在此处调用。
//         MultiDex.install(this);
        initSophix();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

    /**
     * 初始化 Sophix
     */
    private void initSophix() {

        String appVersion = "0.0.0";
        try {
            appVersion = this.getPackageManager()
                    .getPackageInfo(this.getPackageName(), 0)
                    .versionName;
        } catch (Exception e) {
            e.printStackTrace();
        }

        Log.e(TAG, "initSophix: " + appVersion);

        final SophixManager instance = SophixManager.getInstance();
        instance.setContext(this)
                .setAppVersion(appVersion)
                .setSecretMetaData(getResourceById(R.string.ali_sophix_IDSECRET), getResourceById(R.string.ali_sophix_APPSECRET), getResourceById(R.string.ali_sophix_RSASECRET))
                .setEnableDebug(true)//日志
                .setAesKey(null)
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {

                        Log.e(TAG, "onLoad: " + code);
                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                            // 表明补丁加载成功

                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {

                            // 如果需要在后台重启,建议此处用SharePreference保存状态。
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后调用killProcessSafely自杀,以此加快应用补丁,详见1.3.2.3
                            //SophixManager.getInstance().killProcessSafely();

                        } else {

                            // 其他错误信息
                            Log.e(TAG, "onLoad: " + code);

                        }
                    }
                }).initialize();
    }


    /**
     * 获取 string 资源
     *
     * @param rid
     * @return
     */
    private String getResourceById(int rid) {
        return this.getResources().getString(rid);
    }


}

我使用 稳健接入方式

注意:在@SophixEntry() 此处指定项目原有的Application,但是在AndroidManifest中引用的是SophixStubApplication

    @Keep
    @SophixEntry(MyApplication.class)
    static class RealApplicationStub {

    }

通过setSecretMetaData() 设置 阿里参数(创建项目后会看到)

 @Override
    public void onCreate() {
        super.onCreate();
        // queryAndLoadNewPatch不可放在attachBaseContext 中,否则无网络权限,建议放在后面任意时刻
        SophixManager.getInstance().queryAndLoadNewPatch();
    }

官方文档比较详细,仅记录一些比较容易错过的细节

补丁版本问题

  • 初始化通过setAppVersion()设置版本号,这个版本号将用于,客户端(当前集成app)来比对上传到阿里后台的补丁版本,发布的补丁版本号,跟代码中设置的要一致,否则无法加载到
  • 每一个版本,只能允许有一个补丁,若有变动,需要停止旧版本补丁的发布,替换新补丁(所以,紧急的一些小BUG,可以用此方式,当改动比较大,需求变动多,必备的版本更新下载,重新安装的方式,也是不可少的)

补丁相关问题

  • 打新旧包的时候,必须关闭Android Studio 的 Install Run 
  • 补丁替换,必须保证bug的叠加修复。(比如第一个补丁修复A-bug,发现 B-bug需要第二个补丁。那么在第二个补丁中,必须修改了A+B 两个bug)
  • 使用该热修复,不能有增加或删减 Android组件的变动,否则无法成功修复(还没测试)

主要以学习记录为目的,记录一些不错的文档链接。

 

Android 接入阿里热修复Sophix框架 一:为什么选阿里热修复 二:阿里热修复的原理(Sophix技术概览:https://yq.aliyun.com/articles/103527) 三:创建产品及应用(一二三点,都在阿里云官网可以看到) 1.1 找到移动研发平台入口 在阿里云官网,找到:移动研发平台,点击后,进入到移动研发平台官网详情页面 点击后,进入到移动研发平台(Enterprise Mobile A... 阅读详情

相关推荐

Android HTTPS抓包证书配置全解:Proxyman实战避坑指南

HTTPS抓包本质是中间人(MITM)通信的可信建立过程,其核心在于客户端对代理根证书的信任链配置。在Android平台,自7.0起系统默认不信任用户安装的CA证书,必须通过Network Security Config显式声明trust-anchors,将Proxyman导出的PEM格式根证书纳入App级信任锚点。这一机制区别于iOS和桌面浏览器,导致大量开发者卡在‘证书已安装却无法解密’的误区。技术价值在于打通开发调试闭环:精准定位SSLHandshakeException、绕过证书固定、支持React

weixin_32175665的博客 650

一文接入Android阿里Sophix热更新

最近公司项目渐趋成熟,已经不需要经常更新版本,并且更新版本对客户的影响特别大,但是日常维护难免需要更新代码,因此热修复的技术,就比较迫切了。经过一段时间的对比,我们最终决定使用阿里的Sophix方案,因为它实在是太强大,而且接入及其简单。2、关于加固的app,如果采用了加固,去打补丁的时候一定要拿未加固前的apk去操作,否则无法加固。1、引入官方库,在app的build.gradle下,直接插入。除此之外,其他的一切皆可更新,包括.so文件。简单说一下这里,基本是固定格式,最重要的代码是。

zwangltl 1215

开关电源EMI优化秘籍:三明治绕法如何让你的产品通过认证测试

本文深入解析了开关电源EMI优化中的三明治绕法,详细阐述了其通过改变绕组排布来减小初次级寄生电容、降低共模噪声的核心机理。文章提供了从绕制结构选择、绝缘安规处理到实测验证的全流程实战指南,帮助工程师有效利用这一工艺,提升产品通过CCC、CE等EMI认证测试的成功率。

tcp8optimizer的博客 706

阿里Sophix热修复接入指南

接入之前我们先来看下阿里官网的对比图: 注册阿里云账号,选择移动热修复服务 ,选择之后需要开通此功能,点击立即开通即可,Sophix地址 点击创建应用,如图: 配置: Android Studio接入,首先在app目录下的build.gradle文件添加依赖,如图 原谅我不会截长图,这里就分成了两张图展示了 在AndroidManifest添加权限和配置代码如下: <?xml v...

weixin_42371001的博客 1278

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 393

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃

丨汀、的博客 656

安卓开发热修复-阿里hotfix接入-傻瓜操作

有关热修复的概念和原理不多BB,本文介绍的是阿里hotfix接入,直接上步骤: 1.阿里热修复控制台地址 https://www.aliyun.com/product/hotfix 这是我已经添加的项目,大家只需点击"添加产品",进入下一步即可 这里随便填就好,确定 点击添加应用,填入APP名称和你的包名 下载下来这个.json 下载下来之后打开查看,红框内的字段在项目中会用到! 2、...

qq_43669098的博客 1143

X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (二) 摩尔纹的产生机理

1,横向摩尔纹的表现 2,纵向摩尔纹的表现 3,摩尔纹在pitch = 143μm(注:pitch为采样间隔/周期)的FPD上的表现。 4,摩尔纹的危害(严重的影响了临床诊断) 5,摩尔纹对胸片肺部肺纹理的破坏 6,滤线栅的频率(滤线栅生产厂家的产品参数)。判断摩尔纹产生的重要依据之一 7,DR平板探测器的采样频率/空间极限分辨率 l.........

松下J27录放机 4981

Android集成阿里热修复(Hotfix)

1.先注册阿里云账号: https://www.aliyun.com/?spm=5176.12825654.amxosvpfn.2.78342c4arjFnlZ 2.新建应用: 打开控制台 --> 移动研发平台EMAS --> 新建产品 --> 添加应用 3.下载应用的Android配置备用(不用将json文件复制到AS工程) (标红框的一会配置会用到) 4. AS 开始集成(推荐稳健集成,点击跳转阿里官方文档,标题4的部分 代码文档都有) (https://help.aliyun

Android之旅 4993

20 硬件工程师笔面试高频考点真题解析——寄存器

摘要: 寄存器是由多个边沿触发的D触发器组成的多位存储单元,用于同步时序电路中的数据暂存、隔离毛刺、跨时钟域同步等。选型需考虑位宽、触发方式(边沿/电平)、异步控制、电气参数等。核心时序参数包括建立时间(Tsu)、保持时间(Thold)和时钟输出延迟(Tco)。寄存器广泛应用于时序逻辑、流水线分割、毛刺消除、跨时钟域同步及计数分频等场景。同步复位依赖时钟边沿,时序易收敛但需时钟支持;异步复位独立于时钟,上电可靠但需注意亚稳态风险。

XU157303764的博客 1342

UNet 改进(22):结合Transformer结构

保留了UNet的经典编码器-解码器结构在瓶颈层使用Transformer替代传统的卷积层采用跳跃连接保持空间细节信息使用双卷积块(DoubleConv)作为基础构建模块。

2401_82355416的博客 774

Android的热修复技术--阿里的hotfix试用

热修复技术就是不重新启动APP和用户无感知的情况下,对应用进行增量的补丁更新。好处就不说了,好处太多了。即便有些功能无法做到不重启应用,但是这种增量只更新补丁包的方式还是很赞,只需要应用冷启动一下就自动完成了更新包的加载。至少不用再升级发布一次了。 Android的热修复框架有很多。如阿里的andfix,hotfix,微信的tinker和美团的Robust等。 要说哪个最简单最好用,...

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 3085

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

阿里热更新hotfix使用

一、SDK引入 项目build中添加 buildscript { repositories { google() jcenter() //添加这句 maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } } dependencies { ... }

wuto_的博客 1185

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

阿里云 HotFix 注意事项

发布补丁时,应用版本指的是版本名称versionName,而不是版本号,代码中设置的版本名称必须和阿里云后台一致,之前我测试时候就是因为在阿里云后台随便写死了个版本名称,导致一直测试失败 此处SophixEntry应指定自己之前的Application,并且保证自己的Application类名不被混淆。 自己真实的Applcation不可以继承MultiDexApplication,否则冲突。 如果报错:Error:Program type already present: com.ta.utdid2.b.

qq_39140369的博客 2168

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

热修复——紧急修复的大杀器

热修复,万字剖析!在实习中,我有幸参与了一项关键的任务,即实现应用程序的热修复功能。通过这个项目,我学习并了解了热修复技术,并且亲身体验了其在移动应用开发中的重要性和实际应用。在本文中,我将分享我在实习期间学到的关于热修复的知识和经验。我会介绍热修复的概念、原理以及在 Android 应用开发中的实际应用。同时,我还会探讨一些常用的热修复框架,关注我,让我们一起讨论我在实践中遇到的一些挑战和解决方案。

wei的博客 2585

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

向每一个错误致敬——Android HotFix

Android HotFix —— AndFix使用说明项目以飞快的速度迭代,2周进行一次迭代升级。每次开发完功能跑通,在现有机型上测试没问题的话,就提交市场。在以极快的速度迭代的时候,避免不了出现各种问题,传说中的bug 或,重大bug,需要紧急修复 或,可以下次迭代修复的bug 或,影响用户体验的行为 出现bug后,我们的一贯做法: 发布紧急版本,等待用户下载更新。 可是,并

ZhangGeng's Blog 8574

Android热修复之—阿里热修复

如果一个App上线之后发现有重大bug需要紧急修复,那么通常做法是需要修改bug,然后重新打包发布,这样效率会比较低;但是有了热修复,就省事多了,下面就阿里的热修复集成使用做下说明记录,还是比较简单的,主要是对官网的内容做一个整合,看起来更方便一些。 1、首先是要去阿里云官网注册一个账号,然后进入移动研发平台EMAS创建一个工作空间。之后进入空间按照提示添加应用。 2、上面内容填写完后点击下方的创建应用,进入下面的页面下载配置文件 下面这个是配置文件的内容,其中status有1和0,1代表开...

时代新人的博客 4022

阿里云 热更新EMAS / Hotfix 爬坑记录

废话不多说 什么优缺点 大家肯定已经比较过。 如果不知道热更新是个啥 大家可以自行百度 这个到没有贬低哪家的意思,现在做功能大家都想找个简单快捷的集成方式 所以还是决定听话不吃亏 哈哈哈 在开始之前 我是遇到了一个问题 截止发文前 官方工单还没给我一个解决办法 在高版本上 打出来的包 无法进行生成补丁 一直会卡在构建 ,so 目前的办法是降低 版本 我的之前是7+的 后改到了 3+ 所以有用高版本的兄弟萌要注意下 那么好 接下来就进入正式的爬坑之路, 1 首先...

Jonly_W的博客 2162

Android Sophix热修复集成

Android Sophix热修复集成

weixin_43976155的博客 7509

android 非侵入式热修复框架Hotfix使用

先看一下比较热门的各大厂商热修复框架对比:                 Hotfix最新版本spofix是首款非侵入式框架:下面是百度内容        假设大家都想要把用户代码塞到一个框架里。侵入式的做法就是要求用户代码“知道”框架的代码,表现为用户代码需要继承框   架提供的类。非侵入式则不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。  

刘国栋的博客 14万+

Andriod 运行项目报阿里依赖无法解决Could not resolve com.aliyun.ams:alicloud-android-ut:latest.integration.

      在这里我希望每一个进来的大神都看一下,帮我解决一下这个问题为什么出现,怎么解决:Error:A problem occurred configuring project ':LTY'. &gt; Could not resolve all dependencies for configuration ':LTY:_debugApkCopy'. &gt; Could not res...

shenggaofei的博客 1万+

阿里云 移动热修复(Mobile Hotfix)

移动热修复直接看效果1.https://www.aliyun.com/product/hotfix?spm=5176.8142029.388261.233.kapzlu 没有号的注册 有号的登录,淘宝及1688会员可直接使用会员名登录2.android studio集成方式gradle远程仓库依赖,打开项目找到app的build.gradle文件,添加如下配置:添加maven仓库地址:reposi...

haogan的博客 2634

Android studio集成HotFix

直接进入主题,记录一下过程遇到的坑。以后谨记。 首先,接入流程&准备工作看看官方文档。 ·注册阿里百川开发者 ·创建百川应用 ·申请产品权限 ·集成SDK ·生成补丁 ·发布补丁 集成SDK就从集成sdk说起,我按照顺序,查看 Android接入说明,我把SDK,Demo,打包工具,调试工具,一个个的都下载到本地。然后,在项目里添加依赖的时候问题来了。添

首都浪子的博客 1748

【阿里推送】移动端Android集成方式

这里仅仅说一下集成方式,至于使用方式,可以参考我之前整理的Jpush的,几乎一样。 先贴出官方文档(注意是V3.0.0及以上版本) Android SDK 3.0配置 一、创建应用此处不再赘述、、、 二、集成 1.Maven库快速集成(远程同步) 在Project根目录下build.gradle文件中配置maven库URL: allprojects { reposit...

明天你好-博客 4533

【Android studio】阿里问题 Error:Could not find alicloud-android-utdid.jar

Error:Could not find alicloud-android-utdid.jar (com.aliyun.ams:alicloud-android-utdid:1.1.5.3). Searched in the following locations: http://maven.aliyun.com/nexus/content/repositories/releases/co...

weixin_38354056的博客 2769
上一篇: Markdown编辑器 使用
下一篇: Android 适配(百分比布局 GridView+ListView 项布局适配)
Android_man_me
博客等级 码龄12年 10粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值