|
| 1 | +#!/bin/bash |
| 2 | +# taken from: # http://ktnr74.blogspot.com/2014/09/calling-android-services-from-adb-shell.html |
| 3 | + |
| 4 | +ADBShell () { adb ${2+-s} $2 shell "$1" | tr -d '\r' |
| 5 | +} |
| 6 | + |
| 7 | +GetAndroidVersion () { |
| 8 | + GOOGLE_SOURCE="https://android.googlesource.com" |
| 9 | + REPO="platform/frameworks/base" |
| 10 | + ALL_TAGS=$(wget -qO - "$GOOGLE_SOURCE/$REPO/+refs/tags/?format=text" | \ |
| 11 | + tr -d '^{}' | cut -d/ -f3 | sort -u | grep -vE -- '-(cts|sdk)-' | grep -v "_r0") |
| 12 | + TAG=${1:-$(ADBShell 'getprop ro.build.version.release')} |
| 13 | + echo -e "ANDROID_SERIAL=$ANDROID_SERIAL\nro.build.version.release=$TAG" 1>&2 |
| 14 | + TAG=$(echo "$ALL_TAGS" | grep -- "android-${TAG//./\.}" | head -n 1) |
| 15 | + echo -e "TAG=$TAG" 1>&2 |
| 16 | + [ "-$TAG" != "-" ] && return 0 |
| 17 | + echo -e "TAG not valid!\n\nList of valid tags: "$ALL_TAGS 1>&2 |
| 18 | + exit 1 |
| 19 | +} |
| 20 | + |
| 21 | + |
| 22 | +GetServicePackageName () { |
| 23 | + SERVICE_PACKAGE=$(ADBShell 'service list' | grep "\s$1: \[" | head -n 1 | tr '[]' '""' | cut -d\" -f2) |
| 24 | + echo -e "SERVICE=$1\nSERVICE_PACKAGE=$SERVICE_PACKAGE" 1>&2 |
| 25 | +} |
| 26 | + |
| 27 | +GetGoogleSourceFile () { |
| 28 | + #echo -e "downloading $GOOGLE_SOURCE/$REPO/+/$1/$2" 1>&2 |
| 29 | + [ "-$1" == "-" ] && return 1 |
| 30 | + wget -qO - "$GOOGLE_SOURCE/$REPO/+/$1/$2?format=text" | base64 -d |
| 31 | +} |
| 32 | + |
| 33 | +GetAllServices () { |
| 34 | + ALL_SERVICES=$(GetGoogleSourceFile "$TAG" "Android.mk" | tr -d ' \\\t' | grep "\.aidl$" | \ |
| 35 | + head -n 1 | sort -u | grep -v "^framework") |
| 36 | +} |
| 37 | + |
| 38 | +ParseServiceAIDL () { |
| 39 | + GetGoogleSourceFile "$TAG" $(echo "$ALL_SERVICES" | grep "${SERVICE_PACKAGE//.//}\.aidl$" | head -n 1) | \ |
| 40 | + tr -d '\n\r' | gcc -P -E - | tr '{};' '\n\n\n' | grep -v ^$ | sed -e '1,/interface\s/ d' | cat -n |
| 41 | +} |
| 42 | + |
| 43 | +AbortIfExecutableMissing () { |
| 44 | + BIN=($@) |
| 45 | + MISSINGBIN=$(for B in ${BIN[@]}; do [ "$(which $B 2>/dev/null)-" == "-" ] && echo $B; done) |
| 46 | + [ "${MISSINGBIN}-" == "-" ] && return 0 |
| 47 | + echo -e "Can't find the following executables: "$MISSINGBIN |
| 48 | + exit 1 |
| 49 | +} |
| 50 | + |
| 51 | +AbortIfExecutableMissing "adb wget gcc tr sed awk cut grep basename dirname head base64" |
| 52 | + |
| 53 | +GetAndroidVersion |
| 54 | +GetAllServices |
| 55 | +GetServicePackageName $1 |
| 56 | + |
| 57 | +ParseServiceAIDL |
| 58 | + |
| 59 | +exit 0 |
0 commit comments