【平台实例】Android设备的OTA升级二——SDK集成

Android设备的OTA升级

Android设备的OTA升级一——集成前准备



前言

做好集成前准备后,可以进行SKD的集成工作。下面详细介绍了如何集成Android设备的SDK。


一、基本参数配置

1.1 jar包的导入

将下载下来的demo文件中的jar包,导入到自己本地的程序中。
在这里插入图片描述

1.2 本地依赖的添加

jar包导入完成后,需要添加一个本地的依赖。
在这里插入图片描述

1.3 xml配置

本地依赖添加完成后,需要进行xml的配置。我们需要添加相关的权限以及相关的组件。
在这里插入图片描述

配置AndroidManifest.xml:添加权限、组件

 <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.RECOVERY" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.INSTALL_PACKAGES" />
  <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>	
 <provider
          android:name="com.abupdate.common.CommonContextProvider"
          android:authorities="${applicationId}.commoncontextprovider"
          android:exported="false" />

   <receiver android:name="com.abupdate.common_fota.receiver.UpgradeReceiver">
          <intent-filter android:priority="10004">
              <action android:name="android.intent.action.BOOT_COMPLETED" />
              <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
          </intent-filter>
   </receiver>

   <service android:name=".abupdata.AbupdateService"></service>
   <service android:name="com.abupdate.common_mqtt.mqtt_service.MqttService"></service>

配置AndroidManifest.xml:配置主项目的product_id,product_secret
注:标签中Your Product Id,Your Product secret请替换成对应产品的product_id,product_secret,且fota/字段不要省去。

<meta-data
          android:name="fota_configuration_product_id"
          android:value="fota/Your Product_Id"
          tools:replace="android:value" />
  <meta-data
         android:name="fota_configuration_product_secret"
         android:value="fota/Your Product_Secret"
         tools:replace="android:value" />

二、配置SDK

2.1 SDK初始化

需要在initFota函数中进行相关参数的配置
在这里插入图片描述

初始化方法说明

在这里插入图片描述

2.2 零件的初始化

SDK初始化完成后,需要进行的是零件的初始化。零件的初始化是在initData函数中,我们将需要升级的零件进行一个实例化。实例化之后,将对象调用的这个方法进行一个设置。因本次设备有一个Android和一个MCU两个零件,因此实例化了MCU和安卓两个对象。

在这里插入图片描述

初始化零件信息part

  private void initData() {
         try {
            OtaApi.getInstance().setUpgradePartsInfo(IEcuInfoCallback  ecuInfos);
        } catch (FotaException e) {
            Trace.e(TAG, e.getMessage() + ":" + e.getReasonCode());
        }
    }

在MCU对象中,需要进行零件参数的配置,比如零件编码、零件当前版本号的获取、零件升级方法的实现等配置。

在这里插入图片描述

零件信息实例化

DeviceInfo.class:当前的零件信息类
deviceInfo.partName = "零件名称";				//须和平台零件名称配置一致
        deviceInfo.partNumber = "零件编码"			//须和平台零件编码配置一致
        deviceInfo.partSVer = "零件当前版本号";                    
        deviceInfo.filePath = "零件升级包单独地址";    
        deviceInfo.installAuto = OtaConstant.SerialPort;   //设置当前的升级方式
        deviceInfo.isMainProduct = false;                //当前ecu为主控零件(主控为整体升级零件的控制件)
        deviceInfo.productDate = "2020-10-1";
        deviceInfo.customInstallCallback = new InstallBean(); //升级方法实现

在零件当前升级方式的方法里面,我们需要实现零件的升级方法,对出入的升级包进行处理。
在这里插入图片描述

实现零件升级方法

deviceInfo.customInstallCallback.class:当前零件的升级类  implements CustomInstallCallback
方法 @Override
public int writePackage(String file, String md5, String version) 
参数:
          file:下载后的升级文件
           md5:升级文件的md5
          version:升级目标版本

//例:android零件升级方式:
@Override
   public int writePackage(String file, String md5, String version) {
        File files = new File(file);
        if (files.isFile()) {
            try {
                RecoverySystem.installPackage(App.mContext, new File(file));
            } catch (IOException e) {
                //绝大数 权限问题
                Trace.d(TAG, "android 升级失败:"+e.getMessage());
            }
        }
        return 0;
    }

另一个零件的配置与上述零件基本一致,此处不再详细赘述。


三、主要功能集成

OTA升级的主要功能包括:设备注册、更新零件配置信息、检测版本、下载升级包、零件安装升级、升级上报。在MainActivity.java文件中,定义设备注册、检测版本等接口。
在这里插入图片描述

3.1 设备注册

 OtaApi.getInstance().setRegistrarCallback(new onRegistrarCallback() {
            @Override
            public void registrarSuccess() {
                Trace.d(TAG, "注册成功");
                text_view.setText("注册成功");
            }

            @Override
            public void registrarFile(int code) {
                Trace.d(TAG, "注册失败:" + code);
                text_view.setText("注册失败" + code);
            }
        }).registerAsy();

3.2 更新零件信息

   OtaApi.getInstance().setOnConfigCallback(new onConfigCallBack() {
            @Override
            public void configSuccess() {
                Trace.d(TAG, "ecu零件信息获取成功");
                text_view.setText("ecu零件信息获取成功");
            }

            @Override
            public void configFile(int code) {
                Trace.d(TAG, "ecu零件信息获取失败:" + code);
                //重新去注册设备信息
                if (code == Code.REQUEST_ERROR_DEVICE_NO_REGISTER) {

                }
                text_view.setText("ecu零件信息获取失败:" + code);
            }
        }).configAsy();

3.3 检测版本

    OtaApi.getInstance().setOnCheckCallback(new onCheckCallBack() {
            @Override
            public void onStart() {
                Trace.d(TAG, "开始检测");
            }
            @Override
            public void onException(int code) {
                Trace.d(TAG, "检测失败:" + code);
            }

            @Override
            public void onNeutral(int code) {
                Trace.d(TAG, "当前无新版本");
            }

            @Override
            public void onSuccess(PartsDisplayInfo partsDisplayInfos) {
               Trace.d(TAG, "检测成功");
            }
        }).checkAsy();

3.4 下载升级包

  OtaApi.getInstance().setDownloadTaskListener(new onDownloadCallBack() {
            @Override
            public void onSuccess(List<DownEntity> list) {
                Trace.d(TAG, "全部下载成功:onSuccess");
            }

            @Override
            public void onFileSuccess(Object info) {
                Trace.d(TAG, "下载失败:onFileSuccess");
            }

            @Override
            public void onFileProgress(Object info, int progress) {
     		  Trace.d(TAG, "单个零件下载进度:" + progress) 
            }

            @Override
            public void onProgress(int allProgress) {
                Trace.d(TAG, "总进度条:" +allProgress) );
            }

            @Override
            public void onFailed(Object info, int state) {
                Trace.d(TAG, "当前下载错误码:" + state);
            }

            @Override
            public void onStare(DownEntity downEntity) {
              Trace.d(TAG, "开始下载");
            }
        }).downloadAsy();

3.5 安装升级包

   OtaApi.getInstance().setOnInstallCallback(new onInstallCallBack() {
            //开始升级
            @Override
            public void onStart(String partsName) {}

            //升级进度
            @Override
            public void onUpgradeProgress(int tag, int progress) {}

            //升级成功
            @Override
            public void onUpgradeSuccess(String partsName) {}

            //升级失败--当前正在重试安装
            @Override
            public void onUpgradeFail(String partsName, int code) {}
            //当前零件安装升级失败
            @Override
            public void onUpgradeFailRetry(String partsName, int code) {}

            //所有的升级全部走完
            //走到这里还没重启的话 代表当前没有Android升级或者是AB升级,可在此重启设备
            @Override
            public void onUpgradeAllComplete() {}

            //回滚成功
            @Override
            public void onRollBackSuccess(String partsName) {}

            //回滚失败
            @Override
            public void onRollBackFail(String partsName, int code) {}

        }).installAsy();

若对我们的方案感兴趣,想要更加深入了解,可直接访问艾拉比官网,联系我们;或者直接注册,免费试用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值