SDK接口说明
所有文档

          度行·智能车辆云 DuGo

          SDK接口说明

          SDK初始化

          • 方式一:

            // 自定义一个Application类,继承自OtaApplication类,然后实现initService方法,示例:
            public class MyApplication extends Application {
                @Override
                protected void initService(IOtaSdkHelper helper) {
                    // 通过helper对象,可以调用一系列SDK开放的API,详见下面的IOtaSdkHelper接口类使用说明
                }
            }
          • 方式二:

            // 在自定义的Application类中,调用SDK的初始化接口,示例:
            public class MyApplication extends Application {
                @Override
                protected void attachBaseContext(Context base) {
                    super.attachBaseContext(base);
                    OtaApplicationInit.attachBaseContext(base, new MyOtaListener());
                }
            
                @Override
                public void onCreate() {
                    super.onCreate();
                    OtaApplicationInit.onCreate();
                }
            
                private class MyOtaListener implements OtaApplicationInit.IOtaListener {
                    @Override
                    public void initService(IOtaSdkHelper helper) {
                        // 与方式1中initService的实现保持一致
                    }
                }
            }

          IOtaSdkHelper接口类

          public interface IOtaSdkHelper {
              /**
               * 获取ota实例
               *
               * @param vehicleId 车辆ID
               * @param otaId     从平台获取的otaId
               * @param otaSecret 从平台获取的otaSecret
               * @param info      系统信息接口,用户自行实现
               * @return ota接口对象,可以通过它调用升级相关API
               */
              IOtaAgent getInst(String vehicleId, String otaId, String otaSecret, ISystemInfo info);
           
              /**
               * 获取ota实例
               *
               * @param vehicleId        车辆ID
               * @param otaId            从平台获取的otaId
               * @param otaSecret        从平台获取的otaSecret
               * @param info             系统信息接口,用户自行实现
               * @param upgradeInterface 自定义升级接口,用户自行实现,可参考DefaultUpgradeImpl的实现方式
               * @return ota接口对象,可以通过它调用升级相关API
               */
              IOtaAgent getInst(String vehicleId, String otaId, String otaSecret, ISystemInfo info, IUpgradeInterface upgradeInterface);
           
              /**
               * 设置升级路径,ota文件下载存储路径(仅作用于系统升级、APP下载路径已内置)
               * 由于不同厂商定制ROM时,recovery模式可访问的分区权限、空间容量有差异,请根据当前设备环境进行设置
               * 建议通过系统API获取,若不设置,默认为/cache分区路径(Android8.1以后为/data/cache)
               *
               * @param path 存储路径,请使用API获取
               */
              void setUpgradePath(String path);
           
              /**
               * 设置日志生成路径
               * 默认为/data/xxx/包名/files/ota_log.txt,建议使用默认路径
               *
               * @param path 日志路径,请使用API获取
               */
              void setLogPath(String path);
           
              /**
               * 设置日志显示级别(2~6即Verbose~Error)
               *
               * @param level 级别,默认为2(全部写入到日志文件)
               */
              void setLogLevel(int level);
           
              /**
               * 设置自动检查更新通知
               * 默认开启,开启时,SDK会定时发送检查更新请求(30min),
               * 若检查到更新,SDK会发送一个action为otasdk.ota.Constants.BROADCAST_NEWVERSION的本地广播,
               * 开发者可以根据广播信息来定制符合当前设备接入场景的更新通知,例如UI提示、语言提示等。
               * <p>
               * BroadcastReceiver::onReceive中返回的更新信息包含:
               * - otaId:  key为otasdk.ota.Constants.BROADCAST_KEY_PID
               * - 更新内容:key为otasdk.ota.Constants.BROADCAST_KEY_INFOS,值为json字符串,示例:
               *  [{
               *      "package":"com.android.system", // 包名
               *      "version":"8.1.0.0",            // 版本号
               *      "info":"zipfiletest",           // 更新信息
               *      "updtype":1,                    // 类型(0:安装,1:更新,2:删除)
               *      "detail":{"key":"val",...}      // 用户配置自定义字段
               *  },
               *  {
               *      "package":"com.baidu.demo",
               *      "version":"3.0.0.760",
               *      "info":"existtest",
               *      "updtype":0,
               *      "detail":{"key":"val",...}
               *  },
               *  {
               *      "package":"com.baidu.test",
               *      "version":"",
               *      "info":"del test",
               *      "updtype":2,
               *      "detail":{"key":"val",...}
               *  }]
               *
               * @param autoCheck 是否自动检查
               */
              void setAutoCheck(boolean autoCheck);
           
              /**
               * 设置静默升级时间段,用户定制,后台配置了静默升级才生效
               * 时间格式(时:分钟,如09:50)
               *
               * @param timeBegin 开始时间(如23:30)
               * @param timeEnd   结束时间(如02:20)
               */
              void setSilentUpgradeTime(String timeBegin, String timeEnd);
           
              /**
               * 设置扩展选项
               * key=1:下载进度反馈时间间隔,value为毫秒,默认300ms
               * key=2:下载连接超时时间,value为毫秒,默认20000ms
               * key=3:下载读流超时时间,value为毫秒,默认60000ms
               * key=4:下载失败重试次数,value为次数,默认3次
               * key=5:网络异常导致的下载失败,网络恢复后是否自动续传下载,默认不启用,value为1时启用,为0时不启用
               * key=9:下载文件前是否对URL进行Encode,value为0或1,0为开启,1为关闭,默认开启
               *
               * @param key   选项
               * @param value 选项值
               */
              void setExtOption(int key, String value);
               
              /**
               * 预置app包名(针对需要更新设备已安装的应用,确保不会请求到低版本的任务)
               * @param appNames  app包名列表
               */
              void presetAppNames(List<String> appNames);
          }

          ISystemInfo接口类

          public interface ISystemInfo {
              /**
               * 返回系统当前的版本号,系统检查升级的关键参数。
               * 格式要求:4段式(例1.23.45.678),不足4段SDK会自动使用0填充(例1.6 -> 1.6.0.0)
               * 约束:4段式的版本号每段字符串值的整数值范围为0~2^63-1
               * 系统版本号位于系统文件build.prop中,可通过系统API SystemProperties获取,若格式不满足要求,请格式化为4段数字格式
               * 系统更新采用版本号比较的方式,版本号格式错误将无法检测到更新
               *
               * @return 系统当前版本,不能为空
               */
              String getVersion();
           
              /**
               * 返回系统型号
               *
               * @return 系统型号,不能为空
               */
              String getModel();
           
              /**
               * 返回CPU类型
               *
               * @return CPU类型,不能为空
               */
              String getCPU();
          }

          IUpgradeInterface接口类

          public interface IUpgradeInterface {
              /**
               * 安装升级包(系统或app)
               * 调用了IOtaAgent::upgrade时会调用到此接口
               *
               * @param pkgName app包名
               * @param file 升级包文件(系统ota包或apk文件)
               * @param silence 静默安装
               * @return 成功返回"",失败返回错误原因
               */
              String installPackage(String pkgName, String file, boolean silence);
           
              /**
               * 卸载程序(仅app)
               *
               * @param pkgName app包名
               * @param silence 静默卸载
               * @return 成功返回"",失败返回错误原因
               */
              String unInstallPackage(String pkgName, boolean silence);
           
              /**
               * 设置升级监听
               *
               * @param listener 监听器
               */
              void setListener(IUpgradeListener listener);
          }

          DefaultUpgradeImpl默认升级实现类

          (可在此类基础上自定义升级包的安装、卸载)

          public class DefaultUpgradeImpl implements IUpgradeInterface {
              private final String productId;
              protected final WeakReference<Context> context;
              private BlockingQueue<IUpgradeListener> listeners = new LinkedBlockingQueue(1);
              private Map<String, IUpgradeListener> listenerMap = new ConcurrentHashMap();
           
              public DefaultUpgradeImpl(Context context, String productId) {
                  this.context = new WeakReference(context);
                  this.productId = productId;
              }
           
              /**
               * 安装升级包
               * @param pkgName app包名
               * @param fileName 升级包文件(系统ota包或apk文件)
               * @param silence 静默安装
               * @return 成功返回"",失败返回错误原因
               */
              @Override
              public String installPackage(String pkgName, String fileName, boolean silence) {
                  IUpgradeListener listener = null;
           
                  try {
                      listener = (IUpgradeListener)this.listeners.take();
                  } catch (InterruptedException var7) {
                      var7.printStackTrace();
                  }
           
                  this.listenerMap.put(pkgName, listener);
                  File file = new File(fileName);
                  if (!file.exists()) {
                      return "package file is not exist";
                  } else {
                      String result = this.install(pkgName, file, silence);
                      if (TextUtils.isEmpty(result)) {
                          return "";
                      } else {
                          if (this.failDelPackage() && !TextUtils.isEmpty(result) && !"upgrade_pending".equals(result)) {
                              file.delete();
                          }
           
                          return result;
                      }
                  }
              }
           
              private String install(String pkgName, File file, boolean slience) {
                  if ("com.android.system".compareToIgnoreCase(pkgName) == 0) {
                      return this.installSystem(file, slience);
                  } else {
                      this.installApp(pkgName, file, slience);
                      return "upgrade_pending";
                  }
              }
           
              /**
               * 卸载包
               * @param pkgName app包名
               * @param silence 静默卸载
               * @return 成功返回"",失败返回错误原因
               */
              @Override
              public String unInstallPackage(String pkgName, boolean silence) {
                  IUpgradeListener listener = null;
           
                  try {
                      listener = (IUpgradeListener)this.listeners.take();
                  } catch (InterruptedException var5) {
                      var5.printStackTrace();
                  }
           
                  this.listenerMap.put(pkgName, listener);
                  this.uninstallApp(pkgName, silence);
                  return "upgrade_pending";
              }
           
              /**
               * 安装系统:自定义安装系统,请重载此方法
               * @param file ota文件
               * @param silence 静默安装
               * @return 成功返回"",失败返回错误原因。如果是异步升级,则返回Constants.UPGRADE_PENDING,表示安装成功后,等待设备重启
               */
              protected String installSystem(File file, boolean silence) {
                  try {
                      RecoverySystem.installPackage((Context)this.context.get(), file);
                      return "";
                  } catch (IOException var5) {
                      var5.printStackTrace();
                      return "installPackage fail:" + var5.toString();
                  }
              }
           
              /**
               * 安装app:自定义安装app,请重载此方法
               * @param pkg 包名
               * @param apkFile apk文件
               * @param silence 静默安装
               * @return 成功返回"",失败返回错误原因
               */
              protected String installApp(String pkg, File apkFile, boolean silence) {
                  return "";  // 略
              }
           
              /**
               * 卸载app:自定义卸载app,请重载此方法
               * @param pkgName 包名
               * @param silence 是否静默
               */
              protected void uninstallApp(String pkgName, boolean silence) {
                  // 略
              }
           
              /**
               * 获取安装监听对象
               * @param pkg 包名
               * @return 监听器
               */
              protected IUpgradeListener getListener(String pkg) {
                  return (IUpgradeListener)this.listenerMap.get(pkg);
              }
           
              @Override
              public void setListener(IUpgradeListener listener) {
                  try {
                      this.listeners.put(listener);
                  } catch (InterruptedException var3) {
                      var3.printStackTrace();
                  }
              }
           
              /**
               * 升级失败是否删除ota包
               * @return
               */
              protected boolean failDelPackage() {
                  return true;
              }
          }

          IOtaAgent接口类

          public interface IOtaAgent {
              /**
               * 获取sdk信息
               *
               * @return json格式字符串
               * 例如:
               *  {
               *      "vendor_version":"6.0.1",    // rom版本
               *      "sdk_version":"1.0.18"       // sdk版本
               *  }
               */
              String getSdkInfo();
           
              /**
               * 获取产品id,即otaId
               *
               * @return otaId
               */
              String getProductId();
           
              /**
               * 检查更新
               *
               * @param force 是否强制:
               *              1. Recovery升级时,传true和false均可;
               *              2. A/B系统升级时,自定义升级过程
               *              如果回调了升级接口中的IUpgradeListener::onWriteDone,表示新系统已写入磁盘等待设备重启,设备在重启之前均无法请求到系统更新,
               *              如果这里传入true,表示强制请求更新
               * @param listener 监听器
               */
              void checkUpdate(boolean force, ICheckUpdateListener listener);
           
              /**
               * 检查更新的扩展方法
               *
               * @param pkgName 包名(系统包则填空)
               * @param listener 监听器
               * @param checkExist 检查更新,并检测最新版本ota包是否已下载,如果值为false,则仅检查更新,不判断是否下载
               */
              void checkUpdate(String pkgName, ICheckUpdateListenerEx listener, boolean checkExist);
           
              /**
               * 指定包名下载
               *
               * @param pkgName 包名
               * @param listener 监听器
               */
              void downLoad(String pkgName, IDownloadListener listener);
           
              /**
               * 指定包名限速下载
               *
               * @param pkgName 包名
               * @param listener 监听器
               * @param limitSpeed 速度上限值(单位KB)
               *                   网速根据当前网络情况,大约可以在30~60s内收敛
               */
              void downLoad(String pkgName, IDownloadListener listener, int limitSpeed);
           
              /**
               * 下载全部更新
               *
               * @param listener 监听器
               */
              void downLoadAll(IDownloadListener listener);
           
              /**
               * 限速下载全部更新
               *
               * @param listener 监听器
               * @param limitSpeed 限速KB
               */
              void downLoadAll(IDownloadListener listener, int limitSpeed);
           
              /**
               * 取消指定包名的下载任务
               * 下一次调用downLoad会续传下载,不会丢失上一次下载的数据
               *
               * @param pkgName 包名
               */
              void downLoadAbort(String pkgName);
           
              /**
               * 取消当前全部下载任务
               */
              void downLoadAbortAll();
           
              /**
               * 指定包名升级
               *
               * @param pkgName 包名
               * @param listener 监听器
               */
              void upgrade(String pkgName, IUpgradeListener listener);
           
              /**
               * 本地zip系统包升级(仅系统)
               *
               * @param localZip 本地update.zip文件
               * @param listener 监听器
               */
              void upgradeLocal(String localZip, IUpgradeListener listener);
           
              /**
               * 安装全部更新
               *
               * @param listener 监听器
               */
              void upgradeAll(IUpgradeListener listener);
           
              /**
               * 设置自定义的升级接口实现类,除了通过IOtaSdkHelper初始化IOtaAgent时设置自定义的升级逻辑外,可以通过该方法重新设置
               * 建议使用SDK开放的DefaultUpgradeImpl进行扩展
               *
               * @param customUpgrade 自定义升级接口实现类
               */
              void setCustomUpgrade(IUpgradeInterface customUpgrade);
           
              /**
               * 添加自定义请求字段(需要配合OTA平台中任务的下发策略配置,若后台任务选择渠道号下发时,key填Constants.CHANNEL)
               *
               * @param key key
               * @param value value
               * @return
               */
              boolean addReqMetaField(String key, String value);
           
              /**
               * 添加扩展节点(特殊场景下的需求)
               *
               * @param metaName 名称
               * @param jsonString json字符串
               * @return
               */
              boolean addExtMetaData(String metaName, String jsonString);
          }

          监听器ICheckUpdateListener接口类

          public interface ICheckUpdateListener {
              /**
               * 检查到更新,检查成功时调用
               *
               * @param jsonList 更新列表,json格式,key有package(包名)、version(版本号)、info(更新信息)、updtype(安装类型),
               *                 接着可调用IOtaAgent::download下载升级包
               * jsonList示例:
               * [{
               *     "package":"com.android.system",  // 包名
               *     "version":"8.1.0.0",             // 版本号
               *     "info":"zipfiletest",            // 更新信息
               *     "updtype":1,                     // 类型(0:安装,1:更新,2:删除)
               *     "detail":{"key":"val",...}       // 自定义字段
               * },
               * {
               *     "package":"com.android.system",
               *     "version":"8.1.0.0",
               *     "info":"zipfiletest",
               *     "updtype":1,
               *     "detail":{"key":"val",...}
               * },
               * {
               *     "package":"com.android.system",
               *     "version":"8.1.0.0",
               *     "info":"zipfiletest",
               *     "updtype":1,
               *     "detail":{"key":"val",...}
               * }]
               */
              void onSuccess(String jsonList);
           
              /**
               * 检查失败时调用
               *
               * @param errCode 错误码(见蚊末错误码对照表)
               * @param reason 失败原因
               */
              void onFail(int errCode, String reason);
           
              // 回调线程为UI主线程,可在回调函数中更新UI
          }

          监听器ICheckUpdateListenerEx扩展接口类

          public interface ICheckUpdateListenerEx {
              /**
               * 检查到更新,检查成功时调用
               *
               * @param pkgName 包名
               * @param updateInfo 更新内容(json格式),字段信息见ICheckUpdateListener::onSuccess的参数
               * @param exist 表示监测到的新版本的ota文件是否已下载,若下载,接着可调用IOtaAgent::upgrade安装升级
               */
              void onSuccess(String pkgName, String updateInfo, boolean exist);
           
              /**
               * 检查失败时调用
               *
               * @param pkgName 包名
               * @param errCode 错误码(见文末错误码对照表)
               * @param reason 失败原因
               */
              void onFail(String pkgName, int errCode, String reason);
           
              // 回调线程为UI主线程,可在回调函数中更新UI
          }

          监听器IDownloadListener接口类

          public interface IDownloadListener {
              /**
               * pkgName的任务在等待下载
               *
               * @param pkgName 包名
               */
              void onPending(String pkgName);
           
              /**
               * pkgName的下载任务已开始
               *
               * @param pkgName 包名
               */
              void onPrepare(String pkgName);
           
              /**
               * pkgName的下载任务进度更新
               *
               * @param pkgName 包名
               * @param sofarBytes 当前下载长度
               * @param totalBytes 总长度
               */
              void onProgress(String pkgName, int sofarBytes, int totalBytes);
           
              /**
               * pkgName的下载任务被中断
               *
               * @param pkgName 包名
               */
              void onPaused(String pkgName);
           
              /**
               * pkgName的下载任务出现异常而终止
               * @param pkgName 包名
               * @param errCode 错误码(见文末错误码对照表)
               * @param reason 失败原因
               */
              void onFailed(String pkgName, int errCode, String reason);
           
              /**
               * pkgName的任务下载成功,此时可调用接口IOtaAgent::upgrade安装升级包
               *
               * @param pkgName 包名
               */
              void onFinished(String pkgName);
           
              // 回调线程为UI主线程,可在回调函数中更新UI
          }

          监听器IUpgradeListener接口类

          public interface IUpgradeListener {
              /**
               * 升级进度更新
               *
               * @param pkgName 包名
               * @param stage 升级阶段(decodepackage、verifypackage、installpackage)
               * @param percent 进度(1~100)
               */
              void onProgress(String pkgName, String stage, int percent);
           
              /**
               * 升级失败
               *
               * @param pkgName 包名
               * @param errCode 错误码(见文末错误码对照表)
               * @param reason 失败原因
               */
              void onFailed(String pkgName, int errCode, String reason);
           
              /**
               * 升级成功
               * (使用Recovery的系统更新,此方法不调用,因为设备已经重启进入Recovery了,系统重启后会通过广播发出系统升级结果,
               * 请注册action为constants.BROADCAST_UPGRADE的广播接收器来获取升级结果信息,
               * key为constants.BROADCAST_UPGRADE.BROADCAST_UPGRADE_DATA,值为json字符串,json各字段分别为:
               *   "result":true/false
               *   "package":"包名"
               *   "curver":"当前系统版本"
               *   "oldver":"升级前版本")
               * @param pkgName 包名
               */
              void onSuccess(String pkgName);
           
              /**
               * (自定义升级时可能需要,非必调接口):不立即重启、但需要重启才生效的安装过程(A/B系统升级),
               * 调用此方法产生数据上报,可避免重复请求到更新任务,关联接口checkUpdate(boolean force,...)
               * @param pkgName 包名
               */
              void onWriteDone(String pkgName);
           
              // 回调线程为UI主线程,可在回调函数中更新UI
          }

          监听器IUpgradeListenerEx扩展接口类

          public interface IUpgradeListenerEx extends IUpgradeListener {
              /**
               * 升级确认
               *
               * @param taskState 任务状态 0:正常;1:任务被取消;2:任务被暂停
               * @return true:确认升级,false:取消升级
               */
              boolean upgradeConfirm(int taskState);
           
              // 回调线程为子线程
          }

          接口回调错误码对照表

          所属包名:com.baidu.commonlib.interfaces.ErrorCode

          checkUpdate回调错误码:

          public static final int CHECK_PARAM_ERROR = 1;  // 参数错误
          public static final int CHECK_NET_ERROR = 2;    // 网络错误
          public static final int CHECK_NO_UPDATE = 3;    // 无更新

          download回调错误码:

          public static final int DOWNLOAD_PARAM_ERROR = 11;              // 参数错误
          public static final int DOWNLOAD_NET_ERROR = 12;                // 网络错误
          public static final int DOWNLOAD_NO_SPACE = 13;                 // 空间不足
          public static final int DOWNLOAD_APP_INSTALLED_ERROR = 14;      // 安装app,app已安装错误
          public static final int DOWNLOAD_APP_NOT_INSTALL_ERROR = 15;    // 更新app,app未安装错误
          public static final int DOWNLOAD_LOW_VERSION_ERROR = 16;        // 更新app,版本过低错误

          upgrade错误码:

          public static final int UPGRADE_PARAM_ERROR = 21;           // 参数错误
          public static final int UPGRADE_SHA1_VERIFY_ERROR = 22;     // sha1校验失败
          public static final int UPGRADE_SIGN_VERIFY_ERROR = 23;     // 签名校验失败
          public static final int UPGRADE_FILE_NOT_EXIST_ERROR = 24;  // 文件不存在
          public static final int UPGRADE_NOT_INSTALLED_ERROR = 25;   // 卸载app,app未安装
          public static final int UPGRADE_INSTALL_ERROR = 26;         // app安装错误
          public static final int UPGRADE_UNINSTALL_ERROR = 27;       // app卸载错误
          public static final int UPGRADE_CUSTOM_ERROR = 28;          // 安装自定义错误
          public static final int UPGRADE_USER_NOT_CONFIRM = 29;      // 用户取消升级
          上一篇
          集成Android-SDK
          下一篇
          Android-Demo使用指南