伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码

来源:本站原创 浏览:56次 时间:2023-04-09

最近在搞 Android A/B 分区 OTA 升级,手机方案公司出来之后就好久没搞过源码开发了,开始以为挺简单的一个事,没想到折腾了几天,还好终于搞定!

最开始以为还是走 RecoverySystem.installPackage 这种方式,确认之后得用UpdateEngine方式了。

另外有点坑的是,代码调用其实就那么点,但是参数之类的很关键,还有权限也很关键,搬砖过来走不通,我就是卡了2天,一些莫名的错误,没法定位。
如:
ErrorCodeConstants.DOWNLOAD_TRANSFER_ERROR = 9

后面各种查资料,结合系统代码,写了一个解析类 只需传入update.zip包(当然也可以解压之后再传对应的参数),解析后升级,爽的一批。

需要注意的坑在代码里也备注了,有需要的码友要注意下,特别是如果卡住了找不到原因所在的情况。

源码APK我也放在csdn上了,供参考。

下载链接 =====> 应用层调用UpdateEngine代码Apk源码

调用代码大致如下:

package com.system.ota;import android.content.Context;import android.os.UpdateEngine;import android.os.UpdateEngineCallback;import android.util.Log;import java.net.MalformedURLException;import java.text.DecimalFormat;public class SystemUpdateManager {    private static final String TAG = "ota";    UpdateEngine mUpdateEngine;    public SystemUpdateManager(Context context) throws MalformedURLException {        mUpdateEngine = new UpdateEngine();    }    UpdateEngineCallback mUpdateEngineCallback = new UpdateEngineCallback() {        @Override        public void onStatusUpdate(int status, float percent) {            Log.d(TAG, "onStatusUpdate  status: " + status);            switch (status) {                case UpdateEngine.UpdateStatusConstants.UPDATED_NEED_REBOOT:                    rebootNow();                    break;                case UpdateEngine.UpdateStatusConstants.DOWNLOADING:// 回调状态,升级进度                    //mProgressBar.setProgress((int) (percent * 100));                    DecimalFormat df = new DecimalFormat("#");                    String progress = df.format(percent * 100);                    Log.d(TAG, "update progress: " + progress);                    break;                default:                    // noop            }        }        @Override        public void onPayloadApplicationComplete(int errorCode) {            Log.d(TAG, "onPayloadApplicationComplete errorCode=" + errorCode);            if (errorCode == UpdateEngine.ErrorCodeConstants.SUCCESS) {// 回调状态                Log.d(TAG, "UPDATE SUCCESS!");            }        }    };    public void startUpdateSystem(UpdateParser.ParsedUpdate parsedUpdate) {        mUpdateEngine.bind(mUpdateEngineCallback);// 绑定callback        mUpdateEngine.applyPayload(                parsedUpdate.mUrl, parsedUpdate.mOffset, parsedUpdate.mSize, parsedUpdate.mProps);    }    /**     * Reboot the system.     */    private void rebootNow() {        Log.e(TAG, "rebootNow");    }}

相关代码接口说明如下

一、framwork层 应用接口

源代码位置:framwork/base/core/java/android/os/UpdateEngine.java
framwork/base/core/java/android/os/UpdateEngineCallback.java

二、app应用调取applyUpdate方法我这里只说一下大致流程

当然得系统权限的App了,需要系统签名,这些Api也是@SystemApi的

1、创建 UpdateEngineCallback 的对象 mUpdateEngineCallback

2、创建 UpdateEngine 的对象 mUpdateEngine, 创建后服务开启

3、使用mUpdateEngine.bind(mUpdateEngineCallback) 因为bind方法时接受的callback对象,而我们创建的类继承了callback,传入当前类的对象即可

4、调用 applyPayload(String url,long offset,long size,String[] headerKeyValuePairs) 方法具体执行升级

5、在重写的onStatusUpdate(int status, float percent)方法中根据拿到的状态执行进度逻辑

在重写的onPayloadApplicationComplete(int errorCode);方法中执行升级完成后的逻辑

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net