#!/bin/sh initialize_adb() { adb devices if [ -z "${SN}" ]; then number="$(adb devices | grep -wc 'device')" if [ "${number}" -gt 1 ]; then warn_msg "Device not specified; define SN or use '-s'" error_msg "More than one device or emulator found" elif [ "${number}" -eq 1 ]; then SN="$(adb get-serialno)" export SN else error_msg "Device NOT found" fi fi if adb -s "${SN}" shell echo "Testing adb connectivity"; then info_msg "Connected to device ${SN} successfully" else error_msg "Unable to connect to device ${SN}" fi } wait_boot_completed() { timeout="$1" [ "$#" -ne 1 ] && error_msg "Usage: wait_for_boot_completed timeout_in_seconds" end=$(( $(date +%s) + timeout )) boot_completed=false while [ "$(date +%s)" -lt "$end" ]; do if adb -s "${SN}" shell getprop sys.boot_completed | grep "1"; then boot_completed=true break else sleep 3 fi done if "${boot_completed}"; then info_msg "Target booted up completely." else error_msg "wait_boot_completed timed out after ${timeout} seconds" fi } wait_homescreen() { timeout="$1" [ "$#" -ne 1 ] && error_msg "Usage: wait_homescreen timeout_in_seconds" end=$(( $(date +%s) + timeout )) homescreen_displayed=false while [ "$(date +%s)" -lt "$end" ]; do if adb -s "${SN}" logcat -sd ActivityManager:I | grep "Displayed com.android.launcher"; then homescreen_displayed=true break else sleep 3 fi done if "${homescreen_displayed}"; then info_msg "Target booted to homescreen successfully." else error_msg "wait_homescreen timed out after ${timeout} seconds" fi } detect_abi() { # "| tr -d '\r'" is needed here, refer to the below issue. # https://code.google.com/p/android/issues/detail?id=2482 abi="$(adb -s "${SN}" shell uname -m | tr -d '\r')" case $abi in armv7|armv7l|armv7el|armv7lh) abi="armeabi" ;; arm64|armv8|arm64-v8a|aarch64) abi="arm64" ;; *) error_msg "Unknown architecture" ;; esac info_msg "ABI: ${abi}" } install() { file_path="$1" file_name="$(basename "${file_path}")" if adb -s "${SN}" shell mount | grep system | grep -q ro; then # Remounts the /system partition on the device read-write info_msg "/system partition is read-only, remounting it read-write..." adb -s "${SN}" remount fi info_msg "Installing ${file_name}" adb -s "${SN}" push "${file_path}" "/system/bin/" adb -s "${SN}" shell chmod 755 "/system/bin/${file_name}" } pull_output() { device_output="$1" host_output="$2" info_msg "Pulling output from devcie ${SN}" adb -s "${SN}" pull "${device_output}" "${host_output}" }