安卓shiply热更新入门

news2024/9/23 1:38:15

目录

一。我的开发环境

二。集成shiply热更新sdk

三。编写代码

        1。创建一个CustomRFixLog类

         2。创建一个MyApplication类

         3。配置AndroidManifest.xml

         4。创建一个新的Activity继承AbsRFixDevActivity 用于测试

四。登录shiply后台配置

        1。创建项目

五。制作补丁

        1。在app下的build.gradle添加代码

        2。创建签名,配置签名

        3。点击右边assembleRelease打包

        4。获取app-release.apk和R.txt

​        5。添加一些测试代码        

                 6。点击RFixBuildRelease

六。配置补丁

        1。先点击热修设置,配置审核员,要不然后面发审不了

        2。再返回,新建热修发布

        3。创建成功后,并还未能正常使用,需要发布审核,点击详情进入

​        4。添加体验账号,为你初始化时配置的

        5。发布审批

        6。审批通过时,返回显示,灰度中,就表示完成了

七。测试app

        1。安装旧版old.apk测试

        2。运行测试

        3。一些补丁升级原因

八。总结


一。我的开发环境

        idea: Android Studio Chipmunk | 2021.2.1 Patch 2 August 3, 2022

        jdk: 11

        gradle: gradle-7.3.3-bin.zip

        GAP: 7.2.2 (shiply目前只支持3.5~7.4)

二。集成shiply热更新sdk

        文档地址:https://shiply.tds.qq.com/docs/doc?id=4010667110 

        提示(文档里前面集成shiplySDK步骤 我就不 教了,无非就是版本 兼容 问题,这里尤其注意 SDK 版本 和 GAP 版本,否则后面运行会报错,所以我建议用老版本IDEA去创建项目,新版结构改起来会头痛,因为androidX的相关框架版本也要改,如果你不接受不了 改版本,我建议 放弃 热更新 方案,因为 安卓 目前更新换代太快了,热更新 在版本兼容 问题 永远是 头痛问题,还是普通更新就行了,但是多学点东西不会吃亏,虽然目前不实用,但是说不定也能帮上点忙,此博客重点教一下大家如何制作补丁,因为文档里可能不是很清晰)

三。编写代码

        1。创建一个CustomRFixLog类

                代码如下

import com.tencent.rfix.loader.log.IRFixLog;

public class CustomRFixLog implements IRFixLog {
    @Override
    public void v(String s, String s1) {

    }

    @Override
    public void d(String s, String s1) {

    }

    @Override
    public void i(String s, String s1) {

    }

    @Override
    public void w(String s, String s1) {

    }

    @Override
    public void w(String s, String s1, Throwable throwable) {

    }

    @Override
    public void e(String s, String s1) {

    }

    @Override
    public void e(String s, String s1, Throwable throwable) {

    }
}

         2。创建一个MyApplication类

                代码如下

import android.app.Application;
import android.content.Context;
import android.os.Build;

import com.tencent.rfix.anno.ApplicationProxy;
import com.tencent.rfix.entry.DefaultRFixApplicationLike;
import com.tencent.rfix.entry.RFixApplicationLike;
import com.tencent.rfix.lib.RFixInitializer;
import com.tencent.rfix.lib.RFixParams;
import com.tencent.rfix.loader.log.RFixLog;

@ApplicationProxy(application = ".SampleProxyApplication")
public class MyApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        // 1. 初始化日志接口
        RFixLog.setLogImpl(new CustomRFixLog());
        // 2. 构造RFix业务参数
        // appId和appKey在RFix发布平台注册应用时获得
        final String appId = "...";
        final String appKey = "...";
        RFixParams params = new RFixParams(appId, appKey)
                .setDeviceId("000000")                          // 设置业务使用的设备ID,方便进行数据统计(如:QIMEI等)
                .setDeviceManufacturer(Build.MANUFACTURER)      // 设置设备厂商,用于下发规则控制
                .setDeviceModel(Build.MODEL)                    // 设置设备型号,用于下发规则控制
                .setUserId("123456")                            // 设置用户ID,用于下发规则控制
                .setCustomProperty("property1", "xxx");// 设置自定义属性,用于扩展下发规则控制
        // 3. 初始化RFix组件
        RFixApplicationLike applicationLike = DefaultRFixApplicationLike.createApplicationLike(this);
        RFixInitializer.initialize(applicationLike, params);
    }

}

         3。配置AndroidManifest.xml

                在AndroidManifest.xml里加上application标签下加android:name=".SampleProxyApplication",还要记得配置网络权限和读写权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

        4。创建一个新的Activity继承AbsRFixDevActivity 用于测试

四。登录shiply后台配置

        1。创建项目

                获取到app id和app key,填到MyApplication的RFixParams初始化里

五。制作补丁

        1。在app下的build.gradle添加代码

// RFix插件
apply plugin: 'com.tencent.rfix'
// RFix插件的配置
RFixPatch {
    // 补丁类型:Disable/Tinker
    patchType = 'Tinker'
    // 原始Apk
    oldApks = ["${projectDir.absolutePath}/RFix/old.apk"]
    // 修复Apk
    newApks = ["${projectDir.absolutePath}/RFix/new.apk"]
    // 补丁输出目录
    outputFolder = "${projectDir.absolutePath}/RFix/"
    buildConfig {
        // 补丁唯一ID,用于识别补丁和版本是否匹配
        patchId = new Date().format("MMddHHmmss")
        // 原始Apk的混淆文件
        applyMapping = "${projectDir.absolutePath}/RFix/mapping.txt"
        applyResourceMapping = "${projectDir.absolutePath}/RFix/R.txt"
        // 使用splits实现多架构编译时需要开启该功能,以确保每个Apk的PatchId不同
        appendOutputNameToPatchId = true
        // 开启多架构补丁包独立打包功能
        enablePackageSeparate = false
        // 应用是否开启了加固
        isProtectedApp = false
    }
}

                提示 : 制作shiply热更新补丁 必须要有 签名

        2。创建签名,配置签名

        3。点击右边assembleRelease打包

                会发现左边outputs下app-release.apk

        4。获取app-release.apk和R.txt

                把app-release.apk,copy到RFix文件夹里(RFix文件夹需要自己手动创建,放在项目的app目录里面),改名为old.apk,表示是旧的apk

        还要把 intermediates下的 runtime_symbol_list 的 R.txt,这个也要放到RFix里

        提示  (R.txt文件可能因为GAP版本不一样,不一定百分百在 runtime_symbol_list 文件夹里,可能在其他文件夹里;如果你混淆了,还要把mapping.xml放到RFix里,由于我没混淆,所以不用放mapping.xml)

        

        5。添加一些测试代码        

                然后在继承AbsRFixDevActivity的Act添加一条日志输出,用于测试,然后再点击assembleRelease,把生成的app-release.apk,改名为new.apk放到RFix里,表示是修改好bug的新包

        6。点击RFixBuildRelease

                找到如图下,双击RFixBuildRelease,运行成功会在RFix下生成一个文件,里面有一个 已签名的 文件,就是我们要的补丁

六。配置补丁

        1。先点击热修设置,配置审核员,要不然后面发审不了

        2。再返回,新建热修发布

        提示 (修复版本是版本名versionName,不是版本号)

        3。创建成功后,并还未能正常使用,需要发布审核,点击详情进入

        4。添加体验账号,为你初始化时配置的

        5。发布审批

        6。审批通过时,返回显示,灰度中,就表示完成了

 七。测试app

        1。安装旧版old.apk测试

                可以用adb安装,进入RFix文件夹下,CMD命令 adb install old.apk

        2。运行测试

                点击请求配置,再点击重启应用,如果结果和我图运行效果差不多,表示成功。

                并且刷新一下Android studio日志,看一下log是否输出前面打入的日志,如果输出,表示补丁升级成功

     

        3。一些补丁升级原因

                如果 补丁下载失败,请看是否有网络,或者网络权限

                如果 补丁安装失败,请看是否版本名,应用名称,old的签名和new签名是否一致,UserId是否配置,appid是否配置成功。

                如果下载成功,安装补丁失败,建议重新 走一遍 制作补丁流程,重新发布。(可能是缓存问题,或者R.txt缓存的原因,建议在没生成old.apk前,清理一下clear build,生成完后,copy到rfix里之后,在生成new.apk之前,把前面build里生成的apk删一下,保持一定不是缓存的apk,这样可以保持 流程的 严谨性。)

八。总结

        此热更新框架优缺点也明显,优点我不说了,缺点有个很明显的问题就是 框架 版本兼容性问题,高版本SDK集成不了此框架,还有高GAP同样集成不了,导致创建项目的时候,要用老的项目结构 去 兼容,新版AS Gradle8.4.X 集成很麻烦,而且会有版本兼容问题,而且 也不 能 保障 安卓15 是否可以 热更新成功,还是要 手动去更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ae关键帧动画基础练习-街道汽车超车

目录 1.让背景向左移动 2.让小红车匀速移动 3.实现小黄车的超车 完成街道汽车超车的一个简单动画&#xff0c;背景向左移动看起来就如同画面向右移动了一般&#xff0c;根据这个原理&#xff0c;可以完成这个动画。 导入素材时&#xff0c;要选择不同的图层&#xff0c;这样…

微软AD替代方案统一管理Windows和信创电脑的登录认证与网络准入认证

自国资委79号文明确了2027年底前信息系统全面国产化的目标后&#xff0c;金融单位、央国企集团及各子公司纷纷加大国产化改造力度。不少子、孙公司表示&#xff0c;集团要求到2024年底或2025年底国外的关键IT基础设施要停止使用&#xff0c;如微软AD、云桌面等。 信创国产化是大…

Mybatis链路分析:JDK动态代理和责任链模式的应用

背景 此前写过关于代理模式的文章&#xff0c;参考&#xff1a;代理模式 动态代理功能&#xff1a;生成一个Proxy代理类&#xff0c;Proxy代理类实现了业务接口&#xff0c;而通过调用Proxy代理类实现的业务接口&#xff0c;实际上会触发代理类的invoke增强处理方法。 责任链功…

艾体宝洞察丨透过语义缓存,实现更快、更智能的LLM应用程序

传统的缓存只存储数据而不考虑上下文&#xff0c;语义缓存则不同&#xff0c;它能理解用户查询背后的含义。它使数据访问更快&#xff0c;系统响应更智能&#xff0c;对 GenAI 应用程序至关重要。 什么是语义缓存&#xff1f; 语义缓存解释并存储用户查询的语义&#xff0c;使…

功率谱密度估计(Power Spectral Density Estimation, PSD)介绍,轴承磨损检测

介绍 功率谱密度估计&#xff08;Power Spectral Density Estimation, PSD&#xff09;是信号处理中的一项重要技术&#xff0c;用于描述信号在频率域中的能量分布。PSD提供了信号的功率随频率变化的情况&#xff0c;是分析随机信号和确定信号频率特性的常用工具。 功率谱密度…

美团代付支持多模板全开源多种支付通道 多模版三合一源码附教程

美团代付 支持多模板全开源多种支付通道 多模版三合一源码附教程 美团代付源码&#xff0c;支持多模板&#xff0c;全开源&#xff0c;多种支付通道&#xff0c;其它的就没什么好介绍的了&#xff0c;有兴趣的自行去体验吧。

驱动(RK3588S)第五课时:字符设备驱动编程

目录 一、操作系统的框架二、设备的类型三、什么是设备四、杂项字符设备的 API五、代码实现1、底层实现&#xff08;内核&#xff09;2、应用层代码3、交叉编译环境4、结果展示 一、操作系统的框架 二、设备的类型 硬件设备其实是分类型的&#xff1a; 字符设备&#xff1a;所…

TCP/IP 报文传输过程

目录 1. 概念理解2. 传输过程 原文回到 TCP/IP 强烈推荐下面博客&#xff0c;详细阐述了TCP/IP协议概念和传输过程 TCP协议详解 (史上最全) 1. 概念理解 2. 传输过程 以一个具体例子为例&#xff0c;如下图所示&#xff0c;由A 给 F 发送一个数据包整个过程是怎样的

Windows 安装 MySQL8

目录 前言 下载 安装 配置 连接 前言 一般数据库都是部署在 Linux 服务器上&#xff0c;在 Windows 上开发&#xff0c;通过数据库连接工具来连接数据库。在工作中&#xff0c;如果条件允许&#xff0c;会有单独的开发库给开发人员使用&#xff0c;否则开发人员就只能连接…

U盘损坏深度解析与高效数据恢复指南

一、U盘损坏现象初探 在数字化时代&#xff0c;U盘作为便捷的数据存储与传输工具&#xff0c;几乎成为了我们日常生活与工作中的必需品。然而&#xff0c;不少用户都曾遭遇过U盘损坏的困境&#xff0c;面对无法读取、文件丢失或系统提示错误等问题&#xff0c;往往感到束手无策…

【概率与统计 动态规划】 808. 分汤

本文涉及知识点 C动态规划 数学 概率与统计 LeetCode 808. 分汤 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和 25ml 的 汤B 。 提供 50ml 的 汤A 和 50ml 的 汤B 。 提供 25…

Chapter 10 async函数 await关键字

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、async 函数二、await 关键字 前言 在现代 JavaScript 开发中&#xff0c;异步编程是一个重要的概念。随着 ES2017 的引入&#xff0c;async 函数和 await 关键字为处…

一文读懂Mysql连接数的基本知识

目录 前言1. 基本知识2. 常用命令 前言 原先写过一篇SQL Server的知识点&#xff0c;推荐阅读&#xff1a;Sql Server缓冲池、连接池等基本知识&#xff08;附Demo&#xff09; 其余知识点推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&…

Windows10上Nginx如何通过自签名证书方式发布Https服务(上)

背景 在Android开发中使用平板设备进行调试,Android版本是13。在调试中遇到一个这样的报错信息:“java.io.IOException: Cleartext HTTP traffic to 192.168.137.1 not permitted”,然后查了下报错原因是:应用正在尝试通过不安全的HTTP协议进行网络通信,而你的应用运行的环…

计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程

一、前言 计时计费收银软件如何控制设备 佳易王电玩城PS5机计时定时提醒管理系统操作教程 【特别说明&#xff1a;下载的文件为压缩包文件&#xff0c;右键 解压到当前文件夹&#xff0c;将解压后 的文件夹复制到电脑的D盘或E盘&#xff0c;打开该文件夹&#xff0c;将程序图…

竞品分析文档——word版

今天和大家免费分享产品必备文档模板——竞品分析文档&#xff08;word&#xff09;&#xff0c;包括一下部分内容&#xff1a; 1、竞品概述——基本信息、竞品目的、发展历程、产品定位、商业模式 2、市场分析——发展背景、发展现状、流量分析 3、用户分析——用户画像、用…

如何使用Windows自带的软件进行扫描

我们在使用电脑办公的时候&#xff0c;可能会需要进行文件的扫描。有的小伙伴在扫描的过程中可能会出现一些问题&#xff0c;明明扫描仪已经安装了&#xff0c;但是又不知道Windows扫描仪程序在哪里怎么启动&#xff1b;那么今天就跟大家分享一下Windows扫描仪程序在哪里&#…

uniapp插槽用法

目录 什么是插槽? 基本概念 默认插槽 命名插槽 作用域插槽 场景一:子插槽向父组件传递一个字符串 场景二:子插槽向父组件传递对象 什么是插槽? 在 UniApp 中&#xff0c;插槽&#xff08;Slot&#xff09;是一种允许父组件向子组件特定位置插入HTML内容的方式。这种方式使得组…

安科瑞DJSF1352型电子式直流电能表 CE/UL等资质认证

产品概述 DJSF1352型电子式直流电能表采用液品显示&#xff0c;具有RS485功能可与微机进行数据交换。适合充电桩直流计量、电池、太阳能电池板等直流信号设备电量测量和电能计量使用&#xff0c;亦可用于工矿企业&#xff0c;民用建筑&#xff0c;楼宇自动化等现代供配直…

JeecgBoot积木报表AviatorScript表达式注入漏洞复现

文章目录 漏洞信息漏洞复现环境搭建poc复现DNSLog验证 漏洞信息 影响组件&#xff1a;JimuReport积木报表 影响版本&#xff1a;v1.6.0 &#xff1c; JimuReport ≤ 1.7.8 漏洞名称&#xff1a;AviatorScript表达式注入漏洞 漏洞链接&#xff1a;积木报表软件存在AviatorSc…