Android AB系统ota更新

差分包制作步骤,以高通sdm660_64平台userdebug为例:
步骤一:
. build/envsetup.sh && lunch sdm660_64-userdebug
mkdir dist_output
make dist DIST_DIR=dist_output
步骤二:
全编译完成后,会在dist_output生产一系列文件,解压sdm660-64-img-eng-compile.zip,里面的img文件即可作为基础刷机包文件。保存sdm660_64-target_files-eng.compile.zip到源码根目录,重命名为A_target_files-eng.compile.zip。
步骤三:再次对源码进行修改,然后执行步骤一,保存sdm660_64-target_files-eng.compile.zip到源码根目录,重命名为B_target_files-eng.compile.zip。
步骤四:在源码根目录下执行 ./build/tools/releasetools/ota_from_target_files A-target_files-eng.compile.zip B-target_files-eng.compile.zip ota.zip 等待命令行终端提示done,差分包即制作完成。
步骤五:利用UpdateEngine操作查分包,大概源码贴一下:
private static final String OTA_PACKAGE = “/data/ota_package”;
private static final String FROM = “/sdcard/ota.zip”;
private static final String TO = OTA_PACKAGE + File.separator + “ota.zip”;
private static final String DIR = OTA_PACKAGE + File.separator + “ota”;
private static final int REBOOT = 1;
private static final int UPDATE = 2;

private UpdateEngine mUpdateEngine;
private int mUpdateEngineStatus;
private ProgressDialog mProgressDialog;
private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case REBOOT:
                Toast.makeText(FactoryRecovery.this, R.string.recovery_reboot, Toast.LENGTH_SHORT).show();
                break;

            case UPDATE:
                mProgressDialog = new ProgressDialog(FactoryRecovery.this);
                mProgressDialog.setCancelable(false);
                mProgressDialog.setMessage(getString(R.string.recovery_update));
                mProgressDialog.setMax(100);
                mProgressDialog.setProgress(0);
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.show();
                break;

            default:
                break;
        }
    }
};
private UpdateEngineCallback mUpdateEngineCallback = new UpdateEngineCallback() {
    @Override
    public void onStatusUpdate(int status, float percent) {
        mUpdateEngineStatus = status;
        if (mUpdateEngineStatus == UpdateEngine.UpdateStatusConstants.DOWNLOADING) {
            mProgressDialog.setProgress((int) (percent * 100));
        } else if (mUpdateEngineStatus == UpdateEngine.UpdateStatusConstants.FINALIZING) {
            mProgressDialog.dismiss();
        } else if (mUpdateEngineStatus == UpdateEngine.UpdateStatusConstants.UPDATED_NEED_REBOOT) {
            delete(new File(DIR));
            mHandler.sendEmptyMessage(REBOOT);
        } else {
            Log.d(TAG, "onStatusUpdate: status is " +  status);
        }
    }

    @Override
    public void onPayloadApplicationComplete(int errorCode) {
        Log.d(TAG, "onPayloadApplicationComplete: error is " + errorCode);
    }
};

核心类资源下载:https://download.csdn.net/download/hj900328/31873061

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

James_Jordan_1130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值