(FFOS Gecko & Gaia) OTA - 關鍵的apply

來源:互聯網
上載者:User

標籤:

  這篇分析已經是尾聲了,在UpdatePrompt中,調用了UpdateService的applyOsUpdate函數。

 

1. UpdateService.applyOsUpdate

  這個函數很簡單,就是擷取到update.zip以後,調用recovery service去完成更新。

  applyOsUpdate: function AUS_applyOsUpdate(aUpdate) {    if (!aUpdate.isOSUpdate || aUpdate.state != STATE_APPLIED) {      aUpdate.statusText = "fota-state-error";      throw Cr.NS_ERROR_FAILURE;    }    aUpdate.QueryInterface(Ci.nsIWritablePropertyBag);    let osApplyToDir = aUpdate.getProperty("osApplyToDir");    if (!osApplyToDir) {      LOG("UpdateService:applyOsUpdate - Error: osApplyToDir is not defined" +          "in the nsIUpdate!");      pingStateAndStatusCodes(aUpdate, false,                              STATE_FAILED + ": " + FOTA_FILE_OPERATION_ERROR);      handleUpdateFailure(aUpdate, FOTA_FILE_OPERATION_ERROR);      return;    }    // 擷取最終的update.zip    let updateFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);    updateFile.initWithPath(osApplyToDir + "/update.zip");    if (!updateFile.exists()) {      LOG("UpdateService:applyOsUpdate - Error: OS update is not found at " +          updateFile.path);      pingStateAndStatusCodes(aUpdate, false,                              STATE_FAILED + ": " + FOTA_FILE_OPERATION_ERROR);      handleUpdateFailure(aUpdate, FOTA_FILE_OPERATION_ERROR);      return;    }    writeStatusFile(getUpdatesDir(), aUpdate.state = STATE_APPLIED_OS);    LOG("UpdateService:applyOsUpdate - Rebooting into recovery to apply " +        "FOTA update: " + updateFile.path);    try {      let recoveryService = Cc["@mozilla.org/recovery-service;1"]                            .getService(Ci.nsIRecoveryService);      recoveryService.installFotaUpdate(updateFile.path);    } catch (e) {      LOG("UpdateService:applyOsUpdate - Error: Couldn‘t reboot into recovery" +          " to apply FOTA update " + updateFile.path);      pingStateAndStatusCodes(aUpdate, false,                              STATE_FAILED + ": " + FOTA_RECOVERY_ERROR);      writeStatusFile(getUpdatesDir(), aUpdate.state = STATE_APPLIED);      handleUpdateFailure(aUpdate, FOTA_RECOVERY_ERROR);    }  },

 

2. "@mozilla.org/recovery-service;1"

  這個service就不在這裡分析了,很簡單,只是對librecovery.so的簡單封裝,熟悉android OTA的同學一看就懂。

(FFOS Gecko & Gaia) OTA - 關鍵的apply

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.