One of the core tenants of Omni was that we wouldn’t just add a feature to the project without it being value-added and Open Source. This allows our focus to stay community-driven and encourage others to contribute to and benefit from the project.
We all love to get those updates to our devices, but sometimes it becomes tedious to get an update that is 100MB+ over non-WiFi connections, or some of you start to get the jitters if you have to wait to download that new version. To that end, and because we needed a reliable update system built into the project, Chainfire set out to create OpenDelta.
OpenDelta provides automatic OTA updates for nightly builds, making use of deltas when possible, to reduce the size of the download using binary differentials (VCDIFF, RFC 3284) between the previous and the current release, courtesy of xdelta3. The produced delta files are pushed to the public download server, and the current build is saved to a private location to serve as input for the next differential run.
The Android client periodically checks in with the download server and retrieves the .delta file for its current build. After parsing it, it knows the name for the next build as well, and then the one after that, etc. So if you don’t update for a number of builds, it can still reconstruct the latest build by chaining the deltas. It will check each delta if we already have intermediate files present – perhaps we already performed the work for the last build but never flashed it, for example. Based on all this information it will instruct the device to either reconstruct the final flashable ZIP, or just download the latest full OTA and flash that via recovery.
It is important to note that TWRP is currently the only recovery recommended or supported through Omni.
You can access OpenDelta via the System Updates menu found in the About menu of System Settings. There’s also a menu option where you can identify which networks you approve for OpenDelta to automatically check for updates.
OpenDelta is currently still under development and is bound to run into some snags due to a broad range of devices and their respective differences, but if you want to use this with your own project or fork and improve and then contribute back, the repo is located on Omni’s github. Make sure that if you do decide to fork and use for your own projects, that you follow the license which is GPLv3.