diff options
author | Daniel Norman <danielnorman@google.com> | 2021-02-08 11:11:06 -0800 |
---|---|---|
committer | Daniel Norman <danielnorman@google.com> | 2021-02-08 14:05:03 -0800 |
commit | fdeec7f3ba2db6433cd5b7243085ef3a2627b6fa (patch) | |
tree | 47b0d6a41efece012fc7b95849904007a04e0a05 /envsetup.sh | |
parent | bb7e8f602ef04c1a05790c6f4feaf9e795bea77e (diff) | |
parent | 8126dece69a14162bfd7eac56a483a9eeae09b24 (diff) |
Merge SP1A.210208.001
Change-Id: Ifdef2b485fcfbfb1404544620f4a8e904ca0274c
Diffstat (limited to 'envsetup.sh')
-rw-r--r-- | envsetup.sh | 81 |
1 files changed, 68 insertions, 13 deletions
diff --git a/envsetup.sh b/envsetup.sh index 82c99b6223..80b3164ed6 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -33,7 +33,9 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y - allmod: List all modules. - gomod: Go to the directory containing a module. - pathmod: Get the directory containing a module. -- refreshmod: Refresh list of modules for allmod/gomod/pathmod. +- outmod: Gets the location of a module's installed outputs with a certain extension. +- installmod: Adb installs a module's built APK. +- refreshmod: Refresh list of modules for allmod/gomod/pathmod/outmod/installmod. - syswrite: Remount partitions (e.g. system.img) as writable, rebooting if necessary. Environment options: @@ -411,7 +413,10 @@ function addcompletions() fi complete -F _lunch lunch + complete -F _complete_android_module_names pathmod complete -F _complete_android_module_names gomod + complete -F _complete_android_module_names outmod + complete -F _complete_android_module_names installmod complete -F _complete_android_module_names m } @@ -1379,9 +1384,8 @@ function refreshmod() { > $ANDROID_PRODUCT_OUT/module-info.json.build.log 2>&1 } -# List all modules for the current device, as cached in module-info.json. If any build change is -# made and it should be reflected in the output, you should run 'refreshmod' first. -function allmod() { +# Verifies that module-info.txt exists, creating it if it doesn't. +function verifymodinfo() { if [ ! "$ANDROID_PRODUCT_OUT" ]; then echo "No ANDROID_PRODUCT_OUT. Try running 'lunch' first." >&2 return 1 @@ -1391,6 +1395,12 @@ function allmod() { echo "Could not find module-info.json. It will only be built once, and it can be updated with 'refreshmod'" >&2 refreshmod || return 1 fi +} + +# List all modules for the current device, as cached in module-info.json. If any build change is +# made and it should be reflected in the output, you should run 'refreshmod' first. +function allmod() { + verifymodinfo || return 1 python -c "import json; print('\n'.join(sorted(json.load(open('$ANDROID_PRODUCT_OUT/module-info.json')).keys())))" } @@ -1398,20 +1408,12 @@ function allmod() { # Get the path of a specific module in the android tree, as cached in module-info.json. If any build change # is made, and it should be reflected in the output, you should run 'refreshmod' first. function pathmod() { - if [ ! "$ANDROID_PRODUCT_OUT" ]; then - echo "No ANDROID_PRODUCT_OUT. Try running 'lunch' first." >&2 - return 1 - fi - if [[ $# -ne 1 ]]; then echo "usage: pathmod <module>" >&2 return 1 fi - if [ ! -f "$ANDROID_PRODUCT_OUT/module-info.json" ]; then - echo "Could not find module-info.json. It will only be built once, and it can be updated with 'refreshmod'" >&2 - refreshmod || return 1 - fi + verifymodinfo || return 1 local relpath=$(python -c "import json, os module = '$1' @@ -1443,6 +1445,59 @@ function gomod() { cd $path } +# Gets the list of a module's installed outputs, as cached in module-info.json. +# If any build change is made, and it should be reflected in the output, you should run 'refreshmod' first. +function outmod() { + if [[ $# -ne 1 ]]; then + echo "usage: outmod <module>" >&2 + return 1 + fi + + verifymodinfo || return 1 + + local relpath + relpath=$(python -c "import json, os +module = '$1' +module_info = json.load(open('$ANDROID_PRODUCT_OUT/module-info.json')) +if module not in module_info: + exit(1) +for output in module_info[module]['installed']: + print(os.path.join('$ANDROID_BUILD_TOP', output))" 2>/dev/null) + + if [ $? -ne 0 ]; then + echo "Could not find module '$1' (try 'refreshmod' if there have been build changes?)" >&2 + return 1 + elif [ ! -z "$relpath" ]; then + echo "$relpath" + fi +} + +# adb install a module's apk, as cached in module-info.json. If any build change +# is made, and it should be reflected in the output, you should run 'refreshmod' first. +# Usage: installmod [adb install arguments] <module> +# For example: installmod -r Dialer -> adb install -r /path/to/Dialer.apk +function installmod() { + if [[ $# -eq 0 ]]; then + echo "usage: installmod [adb install arguments] <module>" >&2 + return 1 + fi + + local _path + _path=$(outmod ${@:$#:1}) + if [ $? -ne 0 ]; then + return 1 + fi + + _path=$(echo "$_path" | grep -E \\.apk$ | head -n 1) + if [ -z "$_path" ]; then + echo "Module '$1' does not produce a file ending with .apk (try 'refreshmod' if there have been build changes?)" >&2 + return 1 + fi + local length=$(( $# - 1 )) + echo adb install ${@:1:$length} $_path + adb install ${@:1:$length} $_path +} + function _complete_android_module_names() { local word=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(allmod | grep -E "^$word") ) |