当前位置: 首页 > 工具软件 > qilin-app > 使用案例 >

Android APP端进行OTA包的安装

郑俊美
2023-12-01


前言:最近做OTA升级集成到APP中,涉及到一些函数使用和权限问题,简单做个记录
关于OTA包的下载是通过腾讯云的物联网开发平台,集成SDK到自有APP中

一、RecoverySystem

Recovery工作原理可以参考这篇博客:Recovery工作原理
RecoverySystem类进行OTA整包的安装,首先需要

OTA整包:update.zip (注意不是镜像文件的压缩文件,打包OTA整包需要专用命令可百度)

1.1 RecoverySystem.verifyPackage()

验证OTA包的函数,它有一个回调接口ProgressListener(),我们在其中判断验证进度达到100%时进行安装

1.2 RecoverySystem.installPackage()

安装OTA包的函数,该函数需要RECOVERY权限,故我们需在Manifest文件中进行权限声明

<uses-permission android:name="android.permission.RECOVERY"/>

二、文件路径问题

以上两个函数都需要传入update.zip所在的文件路径,但安卓机在启动时可能sdcard不会挂载,所以把update.zip放在sdcard中可能导致文件读不到的情况,这里我尝试把update.zip放在: /data/user/0/update.zip,运行正常
代码示例:

public boolean has_file(){
    String path = "/data/user/0/update.zip";
    File file = new File(path);
    return file.exists();
}

public void installFirmware() throws GeneralSecurityException, IOException {
    String path = "/data/user/0/update.zip";
    final File file = new File(path);
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                RecoverySystem.verifyPackage(file, new RecoverySystem.ProgressListener() {
                    @Override
                    public void onProgress(int i) {
                        Log.e("TAGG","验证安装包进度:"+i);
                        if(i==100){
                            try{
                                RecoverySystem.installPackage(getActivity(),file);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                },null);
            } catch (GeneralSecurityException e) {
                throw new RuntimeException(e);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }).start();
}
 类似资料: