androidandroid-sourceota

How to make own OTA app in AOSP - fslota?


we have build Android from sources and it looks good on our device. Currently we need to make own OTA process, but we dont know how.

We try to implement FSLOTa (https://github.com/embest-tech/android_packages_apps_fsl_imx_demo/tree/master/FSLOta) against our http server, but documentation is very poor - so we simply add source to our source and compile it.

Problem is, that we see app in our box, but it doesnt nothing.

Or there is way to modify built in OTA app, when we change server to our server, we get http request at least. But we dont know, how tells http server to box about new version - any manifest file? XML, JSON or? Is there any example?

Or is there another simple way for implements OTA update to AOSP?

Thank you very much D


Solution

  • I dont know about FSLOTa nor do I know about the device you are working on. But If you want to implement your own OTA process you could try the following (Just a short draft since your question is very broad):

    1. Create a system app that checks from time to time your server for new packages.
    2. if it detects a new package it downloads it to your device.
    3. it copies the downloaded update.zip to /cache/
    4. Then the app creates the following file /cache/recovery/command and writes --update_package=path_to_your_file in it. (For more commands see /bootable/recovery.cpp)
    5. Then it forces a reboot into recovery
    6. recovery installs your ota package.

    Update: I quickly checked the app you linked. I would check these things:

    1. Do you get till the point where RecoverySystem.installPackage() is called ? (https://github.com/embest-tech/android_packages_apps_fsl_imx_demo/blob/master/FSLOta/src/com/fsl/android/ota/OTAServerManager.java#L282)
    2. Do you see a message in logcat from the RecoverySystem that it is going to reboot? (maybe you have a permission problem and your app is not allowed to force "reboot recovery")
    3. Is the path to your update.zip correct? (it should be in /cache/)