Search code examples
androidandroid-sourceota

AOSP incremental OTA failed to apply


I am able to create the OTA incremental package successfully but it is failed when attempting to apply. Below steps, I have followed for creating OTA incremental package.

1. $ Source...
2. $ lunch...
3. $ make -j32
  //Flash the images in the device which are generated inside of "{root}/out/target/product/<device_name>/*.img" directory.
4. $ make target-files-package -j4
  // this will generate the previously changed target file in "{root}/out/target/product/<device_name>/obj/PACKAGING/target_files_intermediates/" directory
          Copy the PREVIOUS-target_files.zip to ${root}
- Apply the changes in the source
5. $ make target-files-package -j4
  // this will generate the previously changed target file in "{root}/out/target/product/<device_name>/obj/PACKAGING/target_files_intermediates/" directory
          Copy the NEW-target_files.zip to ${root}
6. ./build/tools/releasetools/ota_from_target_files -i PREVIOUS-target_files.zip NEW-target_files.zip incremental_ota_update.zip

Now applying the incremental_ota_update.zip from my SYSTEM app using UpdateEngine and I am getting below error in the log:

I/update_engine: [1104/150913.184104:INFO:delta_performer.cc(126)] Caching writes.
I/update_engine: [1104/150913.184201:INFO:delta_performer.cc(386)] Applying 5 operations to partition "dtbo"
I/update_engine: [1104/150913.184251:INFO:delta_performer.cc(601)] Starting to apply update payload operations
E/update_engine: [1104/150913.216482:ERROR:delta_performer.cc(990)] The hash of the source data on disk for this operation doesn't match the expected value. This could mean that the delta update payload was targeted for another version, or that the source partition was modified after it was installed, for example, by mounting a filesystem.
E/update_engine: [1104/150913.216674:ERROR:delta_performer.cc(995)] Expected:   sha256|hex = 54BC8E00C1F26A869E08F861678E1083A71B6386E89BD2A68341F08BA0BB7ADD
E/update_engine: [1104/150913.216723:ERROR:delta_performer.cc(998)] Calculated: sha256|hex = 58D0BD75BCF5FC74E68F26D7EEB2D2C3F1845445AF66F8140476DB9F5B7E07CD
E/update_engine: [1104/150913.216773:ERROR:delta_performer.cc(1009)] Operation source (offset:size) in blocks: 12:1
E/update_engine: [1104/150913.216860:ERROR:delta_performer.cc(1191)] ValidateSourceHash(source_hash, operation, source_fd_, error) failed.
E/update_engine: [1104/150913.216957:ERROR:delta_performer.cc(298)] Failed to perform BROTLI_BSDIFF operation 1, which is the operation 1 in partition "dtbo"
E/update_engine: [1104/150913.217010:ERROR:download_action.cc(337)] Error ErrorCode::kDownloadStateInitializationError (20) in DeltaPerformer's Write method when processing the received payload -- Terminating processing

I/update_engine: [1104/150913.270618:INFO:delta_performer.cc(314)] Discarding 162 unused downloaded bytes
I/update_engine: [1104/150913.270816:INFO:multi_range_http_fetcher.cc(172)] Received transfer terminated.
I/update_engine: [1104/150913.270860:INFO:multi_range_http_fetcher.cc(124)] TransferEnded w/ code 200
I/update_engine: [1104/150913.270900:INFO:multi_range_http_fetcher.cc(126)] Terminating.
I/update_engine: [1104/150913.270943:INFO:action_processor.cc(116)] ActionProcessor: finished DownloadAction with code ErrorCode::kDownloadStateInitializationError
I/update_engine: [1104/150913.270986:INFO:action_processor.cc(121)] ActionProcessor: Aborting processing due to failure.
I/update_engine: [1104/150913.271033:INFO:update_attempter_android.cc(431)] Processing Done.
I/update_engine: [1104/150913.271730:INFO:update_attempter_android.cc(450)] Resetting update progress.
D/OTAService: StatusUpdate - status=IDLE/0
D/UpdateManager: onPayloadApplicationComplete invoked, errorCode=20
 D/UpdateManager: setUpdaterState invoked newState=1
D/OTAService: PayloadApplicationCompleted - errorCode=DOWNLOAD_STATE_INITIALIZATION_ERROR/20 FAILURE

From the above log:

E/update_engine: [1104/150913.216482:ERROR:delta_performer.cc(990)] The hash of the source data on disk for this operation doesn't match the expected value. This could mean that the delta update payload was targeted for another version, or that the source partition was modified after it was installed, for example, by mounting a filesystem.

Any help would be appreciated.


Solution

    • Firstly provide full OTA for any changes.
    • Then provide incremental OTA for any changes.

    Android recommend "For the best user experience, offer a full update for every 3–4 incremental updates. This helps users catch up to the latest release and avoid a long install sequence of incremental updates."

    For more information: https://source.android.com/devices/tech/ota/tools#incremental-updates