U盘OTA升级

	最近在做安卓设备,考虑到一个问题,设备到达现场,需要更新系统,但是拆机刷机有很麻烦,并且数据丢失,为了解决这个问题,考虑到两个方式,第一个就是OTA在线升级、第二个U盘升级,其实原理差不多,但是如果设备内存有点小,可以使用U盘升级系统、我们这个采用的是是全包升级,当然也可以差分别升级系统。

1. 制作全量升级包

 			  1.source build/envsetup.sh 
              2.lunch (选择合适的配置) 
               3.make otapackage 

执行上面的命令,在out目录可以生成升级包。

2.升级APP的制作,其实原理也很简单,但是要使用到系统权限,则需要平台签名,同时需要一些APP权限,由于OTA升级,升级不要放错,不要放在data分区、system分区,一般放在cache分区吗。

    android:sharedUserId="android.uid.system">

    
    
    
    
    
    

上面为权限代码,接着就是复制U盘数据到cache分区,以下复制是带进度条

  public void copyFile(String oldPath, String newPath) {
        try {
            int byteread;
            File oldfile = new File(oldPath);
            if (oldfile.exists()) { //文件存在时
                File newFIle = new File(newPath);
                InputStream inStream = new FileInputStream(oldPath); //读入原文件
                FileOutputStream fs = new FileOutputStream(newPath);
                byte[] buffer = new byte[4048];
                while ((byteread = inStream.read(buffer)) != -1) {
                    if (System.currentTimeMillis() - time1 > 1000) {
                        long l1 = 100 * newFIle.length() / oldfile.length();
                        int l = (int) l1;
                        progressListenr.onProcess((int) l1);
                        time1 = System.currentTimeMillis();
                    }
                    Log.d(TAG, "----byteRead--" + newFIle.length() / (1024 * 1024) + "----" + oldfile.length() / (1024 * 1024));
                    fs.write(buffer, 0, byteread);
                    fs.flush();
                }
                inStream.close();
                fs.close();
            }
        } catch (Exception e) {
          
            e.printStackTrace();

        }
    }

拷贝完成之后,最后就是升级固件,将选中的文件传入函数 ,验证、即可升级

 //升级
    public void installOtaPackageAuto(Context context, File otaPackageFile) {
        Log.e(TAG, "----otaPackageFile  -" + otaPackageFile.exists());
        if (otaPackageFile.exists()) {
            try {
                Log.e(TAG, "----verifyPackage--");
                progressListenr.onProcessStart(1);
                RecoverySystem.verifyPackage(otaPackageFile, this, null);
                progressListenr.onProcessSuccess(1);
                Log.eTAG, "----installPackage--");
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog1show();
                    }
                });
                RecoverySystem.installPackage(context, otaPackageFile);
            } catch (GeneralSecurityException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

上面升级是带进度条,直观明了,这个就是OTA升级全过程。附图
U盘OTA升级_第1张图片
U盘OTA升级_第2张图片

你可能感兴趣的:(Android,Android应用,java,OTA升级,U盘升级,Android系统升级,U盘OTA升级)