Guest User

Get Android service call numbers

a guest
Feb 11th, 2023
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.34 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # All credits to Alex P.: https://stackoverflow.com/a/25987165/16725644
  4. # This is how I usually run the script. For example let's find out the calling code for "getCallState()" method of the "phone" service:
  5. # ./get_android_service_call_numbers.sh phone | grep getCallState
  6. # Requirements: mobile phone connected to usb and a working adb environment.
  7.  
  8. PATH=$PATH:./
  9.  
  10. ADBShell () { adb ${2+-s }$2 shell "$1" | tr -d '\r'
  11. }
  12.  
  13. GetAndroidVersion () {
  14.     local ALL_TAGS=$(wget -qO - "$GOOGLE_SOURCE/$REPO/+refs/tags/?format=text" | \
  15.     tr -d '^{}' | cut -d/ -f3 | sort -u | grep -vE -- '-(cts|sdk)-' | grep -v "_r0")
  16.     TAG=${1:-$(ADBShell 'getprop ro.build.version.release')}
  17.     echo -e "ANDROID_SERIAL=$ANDROID_SERIAL\nro.build.version.release=$TAG" 1>&2
  18.     TAG=$(echo "$ALL_TAGS" | grep -- "android-${TAG//./\.}" | head -n 1)
  19.     echo -e "TAG=$TAG" 1>&2
  20.     [ "-$TAG" != "-"  ] && return 0
  21.     echo -e "TAG not valid!\n\nList of valid tags: "$ALL_TAGS 1>&2
  22.     exit 1
  23. }
  24.  
  25. GetServicePackageName () {
  26.     SERVICE_PACKAGE=$(ADBShell 'service list' | grep "\s$1: \[" | head -n 1 | tr '[]' '""' | cut -d\" -f2)
  27.     echo -e "SERVICE=$1\nSERVICE_PACKAGE=$SERVICE_PACKAGE" 1>&2
  28. }
  29.  
  30. GetGoogleSourceFile () {
  31.     #echo -e "\t\E[31mdownloading\E[0m $GOOGLE_SOURCE/$REPO/+/$1/$2" 1>&2
  32.     [ "-$1" == "-" ] && return 1
  33.     wget -O - "$GOOGLE_SOURCE/$REPO/+/refs/tags/$1/core/java/$2?format=text" | base64 -d
  34. }
  35.  
  36. #GetAllServices () {
  37. #    ALL_SERVICES=$(GetGoogleSourceFile "$TAG" "Android.mk" | tr -d ' \\\t' | grep "\.aidl$" | \
  38. #    sort -u | grep -v "^gen:")
  39. #}
  40.  
  41. ParseServiceAIDL () {
  42.     GetGoogleSourceFile "$TAG" $(echo "$SERVICE_PACKAGE" | sed 's/\./\//g')$(echo ".aidl") | \
  43.     gcc -P -E - | grep -v '@UnsupportedAppUsage' | tr '{};\n\r' '\n\n\n  ' | grep -v ^$ | sed -e '1,/interface\s/ d' | cat -n
  44. }
  45.  
  46. AbortIfExecutableMissing () {
  47.     BIN=($@)
  48.     MISSINGBIN=$(for B in ${BIN[@]}; do [ "$(which $B 2>/dev/null)-" == "-" ] && echo $B; done)
  49.     [ "${MISSINGBIN}-" == "-" ] && return 0
  50.     echo -e "Can't find the following executables: "$MISSINGBIN
  51.     exit 1
  52. }
  53.  
  54. AbortIfExecutableMissing "adb wget gcc tr sed awk cut grep basename dirname head base64"
  55.  
  56. GOOGLE_SOURCE="https://android.googlesource.com"
  57. REPO="platform/frameworks/base"
  58.  
  59. GetAndroidVersion
  60. #GetAllServices
  61. GetServicePackageName $1
  62.  
  63. ParseServiceAIDL
  64.  
  65. exit 0
Add Comment
Please, Sign In to add comment