Add outmod and installmod commands
These are analogs to pathmod/gomod that find/install the module's apk instead of cd'ing to its source directory. Bug: None Change-Id: Iad750e154397f7cfcdd620f1ed6478b05c1225bb Test: Manually, with bash and zsh
This commit is contained in:
81
envsetup.sh
81
envsetup.sh
@@ -33,7 +33,9 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y
|
|||||||
- allmod: List all modules.
|
- allmod: List all modules.
|
||||||
- gomod: Go to the directory containing a module.
|
- gomod: Go to the directory containing a module.
|
||||||
- pathmod: Get 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.
|
- syswrite: Remount partitions (e.g. system.img) as writable, rebooting if necessary.
|
||||||
|
|
||||||
Environment options:
|
Environment options:
|
||||||
@@ -411,7 +413,10 @@ function addcompletions()
|
|||||||
fi
|
fi
|
||||||
complete -F _lunch lunch
|
complete -F _lunch lunch
|
||||||
|
|
||||||
|
complete -F _complete_android_module_names pathmod
|
||||||
complete -F _complete_android_module_names gomod
|
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
|
complete -F _complete_android_module_names m
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1378,9 +1383,8 @@ function refreshmod() {
|
|||||||
> $ANDROID_PRODUCT_OUT/module-info.json.build.log 2>&1
|
> $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
|
# Verifies that module-info.txt exists, creating it if it doesn't.
|
||||||
# made and it should be reflected in the output, you should run 'refreshmod' first.
|
function verifymodinfo() {
|
||||||
function allmod() {
|
|
||||||
if [ ! "$ANDROID_PRODUCT_OUT" ]; then
|
if [ ! "$ANDROID_PRODUCT_OUT" ]; then
|
||||||
echo "No ANDROID_PRODUCT_OUT. Try running 'lunch' first." >&2
|
echo "No ANDROID_PRODUCT_OUT. Try running 'lunch' first." >&2
|
||||||
return 1
|
return 1
|
||||||
@@ -1390,6 +1394,12 @@ function allmod() {
|
|||||||
echo "Could not find module-info.json. It will only be built once, and it can be updated with 'refreshmod'" >&2
|
echo "Could not find module-info.json. It will only be built once, and it can be updated with 'refreshmod'" >&2
|
||||||
refreshmod || return 1
|
refreshmod || return 1
|
||||||
fi
|
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())))"
|
python -c "import json; print('\n'.join(sorted(json.load(open('$ANDROID_PRODUCT_OUT/module-info.json')).keys())))"
|
||||||
}
|
}
|
||||||
@@ -1397,20 +1407,12 @@ function allmod() {
|
|||||||
# Get the path of a specific module in the android tree, as cached in module-info.json. If any build change
|
# 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.
|
# is made, and it should be reflected in the output, you should run 'refreshmod' first.
|
||||||
function pathmod() {
|
function pathmod() {
|
||||||
if [ ! "$ANDROID_PRODUCT_OUT" ]; then
|
|
||||||
echo "No ANDROID_PRODUCT_OUT. Try running 'lunch' first." >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $# -ne 1 ]]; then
|
if [[ $# -ne 1 ]]; then
|
||||||
echo "usage: pathmod <module>" >&2
|
echo "usage: pathmod <module>" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$ANDROID_PRODUCT_OUT/module-info.json" ]; then
|
verifymodinfo || return 1
|
||||||
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
|
|
||||||
|
|
||||||
local relpath=$(python -c "import json, os
|
local relpath=$(python -c "import json, os
|
||||||
module = '$1'
|
module = '$1'
|
||||||
@@ -1442,6 +1444,59 @@ function gomod() {
|
|||||||
cd $path
|
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() {
|
function _complete_android_module_names() {
|
||||||
local word=${COMP_WORDS[COMP_CWORD]}
|
local word=${COMP_WORDS[COMP_CWORD]}
|
||||||
COMPREPLY=( $(allmod | grep -E "^$word") )
|
COMPREPLY=( $(allmod | grep -E "^$word") )
|
||||||
|
Reference in New Issue
Block a user