From 32118f6690a5677b509b08730b896304150d4d63 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Wed, 25 Apr 2018 15:19:47 -0700 Subject: Rename the dir for SystemUpdaterSample. Also replace the occurrence in README.md and PREUPLOAD.cfg. Test: mmma -j bootable/recovery Change-Id: I04c0ef00dd64f49e008ad2a4a2c1e8eaed76bf8d --- updater_sample/.gitignore | 9 + updater_sample/Android.mk | 32 +++ updater_sample/AndroidManifest.xml | 36 +++ updater_sample/README.md | 72 +++++ updater_sample/res/layout/activity_main.xml | 163 +++++++++++ updater_sample/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes updater_sample/res/raw/sample.json | 22 ++ updater_sample/res/values/strings.xml | 21 ++ .../android/systemupdatersample/PayloadSpec.java | 122 ++++++++ .../android/systemupdatersample/UpdateConfig.java | 183 ++++++++++++ .../systemupdatersample/ui/MainActivity.java | 314 +++++++++++++++++++++ .../updates/AbNonStreamingUpdate.java | 52 ++++ .../util/PackagePropertyFiles.java | 42 +++ .../systemupdatersample/util/PayloadSpecs.java | 117 ++++++++ .../systemupdatersample/util/UpdateConfigs.java | 82 ++++++ .../util/UpdateEngineErrorCodes.java | 84 ++++++ .../util/UpdateEngineStatuses.java | 51 ++++ updater_sample/tests/Android.mk | 32 +++ updater_sample/tests/AndroidManifest.xml | 31 ++ updater_sample/tests/build.properties | 1 + .../systemupdatersample/UpdateConfigTest.java | 79 ++++++ .../systemupdatersample/ui/MainActivityTest.java | 48 ++++ .../systemupdatersample/util/PayloadSpecsTest.java | 117 ++++++++ .../util/UpdateConfigsTest.java | 63 +++++ 25 files changed, 1773 insertions(+) create mode 100644 updater_sample/.gitignore create mode 100644 updater_sample/Android.mk create mode 100644 updater_sample/AndroidManifest.xml create mode 100644 updater_sample/README.md create mode 100644 updater_sample/res/layout/activity_main.xml create mode 100644 updater_sample/res/mipmap-hdpi/ic_launcher.png create mode 100644 updater_sample/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 updater_sample/res/raw/sample.json create mode 100644 updater_sample/res/values/strings.xml create mode 100644 updater_sample/src/com/example/android/systemupdatersample/PayloadSpec.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/ui/MainActivity.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/updates/AbNonStreamingUpdate.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/util/PackagePropertyFiles.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/util/PayloadSpecs.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/util/UpdateEngineErrorCodes.java create mode 100644 updater_sample/src/com/example/android/systemupdatersample/util/UpdateEngineStatuses.java create mode 100644 updater_sample/tests/Android.mk create mode 100644 updater_sample/tests/AndroidManifest.xml create mode 100644 updater_sample/tests/build.properties create mode 100644 updater_sample/tests/src/com/example/android/systemupdatersample/UpdateConfigTest.java create mode 100644 updater_sample/tests/src/com/example/android/systemupdatersample/ui/MainActivityTest.java create mode 100644 updater_sample/tests/src/com/example/android/systemupdatersample/util/PayloadSpecsTest.java create mode 100644 updater_sample/tests/src/com/example/android/systemupdatersample/util/UpdateConfigsTest.java (limited to 'updater_sample') diff --git a/updater_sample/.gitignore b/updater_sample/.gitignore new file mode 100644 index 000000000..487263f73 --- /dev/null +++ b/updater_sample/.gitignore @@ -0,0 +1,9 @@ +*~ +*.bak +*.pyc +*.pyc-2.4 +Thumbs.db +*.iml +.idea/ +gen/ +.vscode diff --git a/updater_sample/Android.mk b/updater_sample/Android.mk new file mode 100644 index 000000000..2786de44f --- /dev/null +++ b/updater_sample/Android.mk @@ -0,0 +1,32 @@ +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_PACKAGE_NAME := SystemUpdaterSample +LOCAL_SDK_VERSION := system_current +LOCAL_MODULE_TAGS := samples + +# TODO: enable proguard and use proguard.flags file +LOCAL_PROGUARD_ENABLED := disabled + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +include $(BUILD_PACKAGE) + +# Use the following include to make our test apk. +include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/updater_sample/AndroidManifest.xml b/updater_sample/AndroidManifest.xml new file mode 100644 index 000000000..5bbb21c84 --- /dev/null +++ b/updater_sample/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/updater_sample/README.md b/updater_sample/README.md new file mode 100644 index 000000000..d9864b472 --- /dev/null +++ b/updater_sample/README.md @@ -0,0 +1,72 @@ +# SystemUpdaterSample + +This app demonstrates how to use Android system updates APIs to install +[OTA updates](https://source.android.com/devices/tech/ota/). It contains a sample +client for `update_engine` to install A/B (seamless) updates and a sample of +applying non-A/B updates using `recovery`. + +A/B (seamless) update is available since Android Nougat (API 24), but this sample +targets the latest android. + + +## Running on a device + +The commands expected to be run from `$ANDROID_BUILD_TOP`. + +1. Compile the app `$ mmma bootable/recovery/updater_sample`. +2. Install the app to the device using `$ adb install `. +3. Add update config files. + + +## Update Config file + +Directory can be found in logs or on UI. Usually json config files are located in +`/data/user/0/com.example.android.systemupdatersample/files/configs/`. Example file +is located at `res/raw/sample.json`. + + +## Development + +- [x] Create a UI with list of configs, current version, + control buttons, progress bar and log viewer +- [x] Add `PayloadSpec` and `PayloadSpecs` for working with + update zip file +- [x] Add `UpdateConfig` for working with json config files +- [x] Add applying non-streaming update +- [ ] Add applying streaming update +- [ ] Prepare streaming update (partially downloading package) +- [ ] Add tests for `MainActivity` +- [ ] Add stop/reset the update +- [ ] Verify system partition checksum for package +- [ ] HAL compatibility check +- [ ] Change partition demo +- [ ] Add non-A/B updates demo + + +## Running tests + +1. Build `$ mmma bootable/recovery/updater_sample/` +2. Install app + `$ adb install $OUT/system/app/SystemUpdaterSample/SystemUpdaterSample.apk` +3. Install tests + `$ adb install $OUT/testcases/SystemUpdaterSampleTests/SystemUpdaterSampleTests.apk` +4. Run tests + `$ adb shell am instrument -w com.example.android.systemupdatersample.tests/android.support.test.runner.AndroidJUnitRunner` +5. Run a test file + ``` + $ adb shell am instrument \ + -w com.example.android.systemupdatersample.tests/android.support.test.runner.AndroidJUnitRunner \ + -c com.example.android.systemupdatersample.util.PayloadSpecsTest + ``` + + +## Getting access to `update_engine` API and read/write access to `/data` + +Run adb shell as a root, and set SELinux mode to permissive (0): + +```txt +$ adb root +$ adb shell +# setenforce 0 +# getenforce +``` diff --git a/updater_sample/res/layout/activity_main.xml b/updater_sample/res/layout/activity_main.xml new file mode 100644 index 000000000..3cd772107 --- /dev/null +++ b/updater_sample/res/layout/activity_main.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + +