安卓shiply热更新入门

目录

一。我的开发环境

二。集成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
    }
}

        2。创建签名,配置签名

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

        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 集成很麻烦,而且会有版本兼容问题。

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值