#!/bin/bash adb="adb" if [[ $# -gt 0 ]]; then adb="adb $*" # for setting -e, -d or -s fi function atexit() { local retval=$? if [[ $retval -eq 0 ]]; then rm $log else echo "There were errors, please check log at $log" fi } log=$(mktemp) trap "atexit" EXIT function compile_module() { local android_mk="$1" echo "Compiling .${android_mk:${#PWD}}" ONE_SHOT_MAKEFILE="$android_mk" make -C "../../../../../" files | tee -a $log if [[ ${PIPESTATUS[0]} -ne 0 ]]; then exit 1 fi } function wait_for_boot_completed() { echo "Rebooting device" $adb wait-for-device logcat -c $adb wait-for-device logcat | grep -m 1 -e 'PowerManagerService.*bootCompleted' >/dev/null } function mkdir_if_needed() { local path="$1" if [[ "${path:0:1}" != "/" ]]; then echo "mkdir_if_needed: error: path '$path' does not begin with /" | tee -a $log exit 1 fi local basename=$(basename "$path") local dirname=$(dirname "$path") local t=$($adb shell ls -l $dirname | tr -d '\r' | grep -e "${basename}$" | grep -oe '^.') case "$t" in d) # File exists, and is a directory ... # do nothing ;; l) # ... (or symbolic link possibly to a directory). # do nothing ;; "") # File does not exist. mkdir_if_needed "$dirname" $adb shell mkdir "$path" ;; *) # File exists, but is not a directory. echo "mkdir_if_needed: file '$path' exists, but is not a directory" | tee -a $log exit 1 ;; esac } function disable_overlay() { echo "Disabling overlay" $adb shell rm /vendor/overlay/framework/framework-res.apk $adb shell rm /data/resource-cache/vendor@overlay@framework@framework-res.apk@idmap } function enable_overlay() { echo "Enabling overlay" mkdir_if_needed "/system/vendor" mkdir_if_needed "/vendor/overlay/framework" $adb shell ln -s /data/app/com.android.overlaytest.overlay.apk /vendor/overlay/framework/framework-res.apk } function instrument() { local class="$1" echo "Instrumenting $class" $adb shell am instrument -w -e class $class com.android.overlaytest/android.test.InstrumentationTestRunner | tee -a $log } function remount() { echo "Remounting file system writable" $adb remount | tee -a $log } function sync() { echo "Syncing to device" $adb sync data | tee -a $log } # some commands require write access, remount once and for all remount # build and sync compile_module "$PWD/OverlayTest/Android.mk" compile_module "$PWD/OverlayTestOverlay/Android.mk" sync # instrument test (without overlay) $adb shell stop disable_overlay $adb shell start wait_for_boot_completed instrument "com.android.overlaytest.WithoutOverlayTest" # instrument test (with overlay) $adb shell stop enable_overlay $adb shell start wait_for_boot_completed instrument "com.android.overlaytest.WithOverlayTest" # cleanup exit $(grep -c -e '^FAILURES' $log)