1
0
Fork 0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2024-11-30 09:40:09 +00:00

feat(avd): add avd plugin

This commit is contained in:
Andrzej Zabost 2021-08-09 19:37:07 +02:00
parent 9c34c359c4
commit 8dff766e82
2 changed files with 127 additions and 0 deletions

46
plugins/avd/README.md Normal file
View file

@ -0,0 +1,46 @@
# avd plugin
The avd plugin provides aliases for Android Virtual Device / Android
Emulator commands.
To use it, add avd to the plugins array of your zshrc file:
```zsh
plugins=(... avd)
```
## Requirements
In order to make this work, you will need to have the Android `emulator`
tool set up in your path. This plugin will try to find that tool in
`$ANDROID_HOME` as a last resort, however it will make it slower and may
not work as expected.
## Functions
- `avds` - Lists all the AVDs
- `avd [-v] <n>` - Launches n-th AVD from the AVDs list printed by
`avds`
- `-v` will let stdout and stderr print to the console which is
disabled by default to avoid the clutter
- `find_emulator` - Tries to find the `emulator` tool either in your
path or `$ANDROID_HOME` directory
## Aliases
- `emus` - Same as `avds`
- `emu [-v] <n>` - Same as `avd [-v] <n>`
## Exemplary usage:
```
~/
> avds
Pixel_2_API_30
Samsung_Tab_A_2019_API_25
Samsung_Tab_A_2019_API_29
~/
> avd 2
Starting emulator: Samsung_Tab_A_2019_API_25
[3] 33463
```

View file

@ -0,0 +1,81 @@
function find_emulator() {
local emulator_found
if [[ -n $(command -v emulator) ]]; then
emulator_found="emulator"
elif [[ -d "$ANDROID_HOME" ]]; then
# If there is no emulator in the path, try to find it in $ANDROID_HOME if it
# is defined.
emulator_found=$(find "$ANDROID_HOME" -name emulator -type f | head -1)
fi
if [[ -n $emulator_found ]]; then
echo "$emulator_found"
else
cat <<< "Emulator not found" 1>&2
# Use "emulator" even if it's not found just to let the other functions fail
# later.
echo "emulator"
fi
}
function avds() {
local emulator_path
emulator_path=$(find_emulator)
eval "$emulator_path -list-avds"
}
function avd() {
help() {
echo "Usage: avd [-v] [AVD position on the list]"
avds
}
local OPTIND o verbose avd_number avd_name avds_count emulator_path
while getopts ":v" o; do
case "$o" in
v)
verbose=1;;
*)
help; return;;
esac
done
shift $((OPTIND-1))
avd_number="$1"
if [[ -z $avd_number ]]; then
help
return
fi
avds_count=$(avds | wc -l | grep -Eo '[0-9]+') || return
if [[ $avds_count -le 0 ]]; then
echo "No AVDs found"
return
fi
if [[ ($avd_number -lt 1 || $avd_number -gt $avds_count) ]]; then
echo "The number must be in 1..${avds_count}"
return
fi
avd_name=$(avds | head -"$avd_number" | tail -1)
echo "Starting emulator: $avd_name"
emulator_path=$(find_emulator)
cmd_to_execute="$emulator_path -avd $avd_name"
if [[ $verbose -eq 1 ]]; then
eval "$cmd_to_execute"
else
eval "$cmd_to_execute" > /dev/null 2>&1
fi
}
alias emus="avds"
alias emu="avd"