From f1b0432ad96637ae24848f3750af9b6544b9ee9c Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 11 May 2024 00:05:44 +0800 Subject: [PATCH] feat: add adb&fastboot completions (#834) Although all correct commands have been added where possible, some instructions may be missing --- custom-completions/adb/adb-completions.nu | 304 ++++++++++++++++++ custom-completions/adb/readme.md | 24 ++ .../fastboot/fastboot-completions.nu | 164 ++++++++++ custom-completions/fastboot/readme.md | 24 ++ 4 files changed, 516 insertions(+) create mode 100644 custom-completions/adb/adb-completions.nu create mode 100644 custom-completions/adb/readme.md create mode 100644 custom-completions/fastboot/fastboot-completions.nu create mode 100644 custom-completions/fastboot/readme.md diff --git a/custom-completions/adb/adb-completions.nu b/custom-completions/adb/adb-completions.nu new file mode 100644 index 00000000..a928a938 --- /dev/null +++ b/custom-completions/adb/adb-completions.nu @@ -0,0 +1,304 @@ +def "nu-complete adb one-device-args" [] { + [SERIAL USB] +} + +def "nu-complete adb compression-algorithm" [] { + [any none brotli lz4 zstd] +} + +def "nu-complete adb sync-partations" [] { + [all data odm oem product system system_ext vendor] +} + +def "nu-complete adb wait-for-state" [] { + [-device -recovery -rescue -sideload -bootloader -disconnect] +} + +def "nu-complete adb wait-for-transport" [] { + [-usb -local -any] +} + +def "nu-complete adb reboot-type" [] { + [ + bootloader + recovery + edl + sideload # Reboots into recovery and automatically starts sideload mode. + sideload-auto-reboot + " " + ] +} + +export extern "adb" [ + -a # listen on all network interfaces, not just localhost + -d # use USB device (error if multiple devices connected) + -e # use TCP/IP device (error if multiple TCP/IP devices available) + -s: string # use device with given serial (overrides $ANDROID_SERIAL) + -t: string # use device with given transport id + -H: string # name of adb server host [default=localhost] + -P: int # port of adb server [default=5037] + -L: string # listen on given socket for adb server [default=tcp:localhost:5037] + + --exit-on-write-error # exit if stdout is closed +] + +# Show this help message. +export extern "adb help" [] + +# Show version number. +export extern "adb version" [] + +# Connect to a device via TCP/IP [default PORT=5555]. +export extern "adb connect" [ + host_port: string # Connect to a device via TCP/IP [default PORT=5555]. +] + +# Disconnect from given TCP/IP device [default PORT=5555], or all. +export extern "adb disconnect" [ + host_port?: string # Disconnect device via TCP/IP [default PORT=5555] (disconnec all if no ip given). +] + +# Pair with a device for secure TCP/IP communication. +export extern "adb pair" [ + host_port: string # Connect to a device via TCP/IP [default PORT=5555]. + PAIRING_CODE: string +] + +export extern "adb forward" [ + --list # List all forward socket connections. + --no-rebind + LOCAL_REMOTE: string # Forward socket connection using one of the followings. tcp:PORT (local may be “tcp:0” to pick any open port. localreserved:UNIX_DOMAIN_SOCKET_NAME. localfilesystem:UNIX_DOMAIN_SOCKET_NAME. jdwp:PROCESS PID (remote only). vsock:CID:PORT (remote only). acceptfd:FD (listen only). dev:DEVICE_NAME. dev-raw:DEVICE_NAME. (open device in raw mode)**. + --remove: string # Remove specific forward socket connection. + --remove-all # Remove all forward socket connections. +] + +export extern "adb reverse" [ + --list # List all forward socket connections. + --no-rebind + LOCAL_REMOTE: string # Forward socket connection using one of the followings. tcp:PORT (local may be “tcp:0” to pick any open port. localreserved:UNIX_DOMAIN_SOCKET_NAME. localfilesystem:UNIX_DOMAIN_SOCKET_NAME. jdwp:PROCESS PID (remote only). vsock:CID:PORT (remote only). acceptfd:FD (listen only). dev:DEVICE_NAME. dev-raw:DEVICE_NAME. (open device in raw mode)**. + --remove: string # Remove specific forward socket connection. + --remove-all # Remove all forward socket connections. +] + +export extern "adb mdns" [ + check # Check if mdns discovery is available. + services # List all discovered services. +] + + +# List connected devices. +export extern "adb devices" [ + -l # Use long output. +] + + +# Push a single package to the device and install it +export extern "adb install" [ + Package: string + -r # Replace existing application. + -t # Allow test packages. + -d # Allow version code downgrade (debuggable packages only). + -p # Partial application install (install-multiple only). + -g # Grant all runtime permissions. + --abi:string # Override platform's default ABI. + --instant # Cause the app to be installed as an ephemeral install app. + --no-streaming # Always push APK to device and invoke Package Manager as separate steps. + --streaming # Force streaming APK directly into Package Manager. + --fastdeploy # Use fast deploy. + --no-fastdeploy # Prevent use of fast deploy. + --force-agent # Force update of deployment agent when using fast deploy. + --date-check-agent # Update deployment agent when local version is newer and using fast deploy. + --version-check-agent # Update deployment agent when local version has different version code and using fast deploy. + --local-agent # Locate agent files from local source build (instead of SDK location). See also adb shell pm help for more options. +] + + + +# Push one or more packages to the device and install them atomically +export extern "adb install-multiple" [ + Package: string + -r # Replace existing application. + -t # Allow test packages. + -d # Allow version code downgrade (debuggable packages only). + -p # Partial application install (install-multiple only). + -g # Grant all runtime permissions. + --abi:string # Override platform's default ABI. + --instant # Cause the app to be installed as an ephemeral install app. + --no-streaming # Always push APK to device and invoke Package Manager as separate steps. + --streaming # Force streaming APK directly into Package Manager. + --fastdeploy # Use fast deploy. + --no-fastdeploy # Prevent use of fast deploy. + --force-agent # Force update of deployment agent when using fast deploy. + --date-check-agent # Update deployment agent when local version is newer and using fast deploy. + --version-check-agent # Update deployment agent when local version has different version code and using fast deploy. + --local-agent # Locate agent files from local source build (instead of SDK location). See also adb shell pm help for more options. +] + +export extern "adb install-multi-package" [ + Package: string + -r # Replace existing application. + -t # Allow test packages. + -d # Allow version code downgrade (debuggable packages only). + -p # Partial application install (install-multiple only). + -g # Grant all runtime permissions. + --abi:string # Override platform's default ABI. + --instant # Cause the app to be installed as an ephemeral install app. + --no-streaming # Always push APK to device and invoke Package Manager as separate steps. + --streaming # Force streaming APK directly into Package Manager. + --fastdeploy # Use fast deploy. + --no-fastdeploy # Prevent use of fast deploy. + --force-agent # Force update of deployment agent when using fast deploy. + --date-check-agent # Update deployment agent when local version is newer and using fast deploy. + --version-check-agent # Update deployment agent when local version has different version code and using fast deploy. + --local-agent # Locate agent files from local source build (instead of SDK location). See also adb shell pm help for more options. +] + + +# Remove specified application from the device +export extern "adb uninstall" [ + APPLICATION_ID: string # Remove this APPLICATION_ID from the device. + -k +] + +# Run remote shell command (interactive shell if no command given) +export extern "adb shell" [ + -e # Choose escape character, or “none”; default ‘~’. + -n # Don't read from stdin + -T # Disable pty allocation. + -t # Allocate a pty if on a tty (-tt force pty allocation). + -x # Disable remote exit codes and stdout/stderr separation. + COMMAND?:string # Run emulator console COMMAND +] + + +# Copy local files/directories to device. +export extern "adb push" [ + --sync # Only push files that are newer on the host than the device. + -n # Dry run, push files to device without storing to the filesystem. + -z:string@"nu-complete adb compression-algorithm" # enable compression with a specified algorithm (any/none/brotli/lz4/zstd). + -Z # Disable compression. + +] + +# Copy files/dirs from device +export extern "adb pull" [ + -a # preserve file timestamp and mode. + --sync # Only push files that are newer on the host than the device. + -n # Dry run. Push files to device without storing to the filesystem. + -z:string@"nu-complete adb compression-algorithm" # enable compression with a specified algorithm (any/none/brotli/lz4/zstd). + -Z # Disable compression. + ...remote: string + local: string +] + + +# Sync a local build from $ANDROID_PRODUCT_OUT to the device (default all) +export extern "adb sync" [ + parations: string@"nu-complete adb sync-partations" + -n # Dry run. Push files to device without storing to the filesystem. + -z:string@"nu-complete adb compression-algorithm" # enable compression with a specified algorithm (any/none/brotli/lz4/zstd). + -Z # Disable compression. + -l # List files that would be copied, but don't copy them. +] + +# Ensure that there is a server running. +export extern "adb start-server" [ # only allowed with 'start-server' or 'server nodaemon', + --one-device: string@"nu-complete adb one-device-args" #server will only connect to one USB device, specified by a serial number or USB device address. +] + +# Kill the server if it is running. +export extern "adb kill-server" [] + +# Close connection from host or device side to force reconnect. +export extern "adb reconnect" [ + device?: string +] + +# Close connection from device side to force reconnect. +export extern "adb reconnect device" [] + +# Reset offline/unauthorized devices to force reconnect. +export extern "adb reconnect offline" [] + +# Attach a detached USB device identified by its SERIAL number. +export extern "adb attach" [ + SERIAL: string +] + +# Detach from a USB device identified by its SERIAL to allow use by other processes. +export extern "adb detach" [ + SERIAL: string +] + +# list features supported by adb server. +export extern "adb host-features" [] + +# list features supported by both adb server and device. +export extern "adb features" [] + +# Write bugreport +export extern "adb bugreport" [ + PATH: string # PATH [default=bugreport.zip]; if PATH is a directory, the bug report is saved in that directory. devices that don't support zipped bug reports output to stdout. + +] + +# List pids of processes hosting a JDWP transport. +export extern "adb jdwp" [] + +# Show device log (logcat --help for more). +export extern "adb logcat" [] + +# Disable dm-verity checking on userdebug builds. +export extern "adb disable-verity" [] + +# Re-enable dm-verity checking on userdebug builds. +export extern "adb enable-verity" [] + +# Generate adb public/private key; private key stored in FILE. +export extern "adb keygen" [ + FILE: string +] + +# Wait for device to be in a given state. +export extern "adb wait-for" [ + STATE: string@"nu-complete adb wait-for-state" + TRANSPORT: string@"nu-complete adb wait-for-transport" +] + +# Print offline | bootloader | device. +export extern "adb get-state" [] + +# Print SERIAL_NUMBER. +export extern "adb get-serialno" [] + +# Print DEVICE_PATH. +export extern "adb get-devpath" [] + +# Remount partitions read-write. +export extern "adb remount" [ + -R # Automatically reboot the device. +] + +# Reboot the device; defaults to booting system image but supports bootloader and recovery too. +export extern "adb reboot" [ + type:string@"nu-complete adb reboot-type" +] + +# Sideload the given full OTA package +export extern "adb sideload" [ + OTAPACKAGE: string +] + +# Restart adbd with root permissions. +export extern "adb root" [] + +# Restart adbd without root permissions. +export extern "adb unroot" [] + +# Restart adbd listening on USB. +export extern "adb usb" [] + +# Restart adbd listening on TCP on PORT. +export extern "adb tcpip" [ + PORT:string +] diff --git a/custom-completions/adb/readme.md b/custom-completions/adb/readme.md new file mode 100644 index 00000000..53b4bec8 --- /dev/null +++ b/custom-completions/adb/readme.md @@ -0,0 +1,24 @@ +# SDK Platform Tools completions + +A Nushell extern definition and completers for [Android Debugger Bridge `adb`](https://developer.android.com/tools/adb). + + +This module provides extern definitions for almost all of the `adb` commands and their flags. + +## Usage + +simply import the extern definitions with + +```nu +use path/to/adb-completions.nu * # don't forget the star `*` +``` + +or + +```nu +source path/to/adb-completions.nu +``` + +Once imported completions will be available for commands, flags, options, and some values as well. +Display the commands by entering the `→ tab` key in the command line after `adb`or any of it's command options. + diff --git a/custom-completions/fastboot/fastboot-completions.nu b/custom-completions/fastboot/fastboot-completions.nu new file mode 100644 index 00000000..6aae9f00 --- /dev/null +++ b/custom-completions/fastboot/fastboot-completions.nu @@ -0,0 +1,164 @@ +# Flash all partitions from $ANDROID_PRODUCT_OUT. On A/B devices, flashed slot is set as active. Secondary images may be flashed to inactive slot. +export extern "fastboot flashall" [] + + +# Flash given partition, using the image from $ANDROID_PRODUCT_OUT if no filename is given. +export extern "fastboot flash" [ + partation: string + filename?: string # [Default: $ANDROID_PRODUCT_OUT] +] + + +# Flash all partitions from an update.zip package. +export extern "fastboot update" [ + ZIP: string +] + + +# List devices in bootloader +export extern "fastboot devices" [ + -l # with device paths +] + +# ===================Basics========================================== # + + +# Lock partitions for flashing +export extern "fastboot flashing lock" [] + +# Unlock partitions for flashing +export extern "fastboot flashing unlock" [] + +# Lock 'critical' bootloader partitions. +export extern "fastboot flashing lock_critical" [] + +# Unlock 'critical' bootloader partitions. +export extern "fastboot flashing unlock_critical" [] + +# Check whether unlocking is allowed (1) or not(0). +export extern "fastboot flashing get_unlock_ability" [] + + + +# =========================advanced=================================== # + +# Erase a flash partition. +export extern "fastboot erase" [ + paration: string +] + +# Format a flash partition. +export extern "fastboot format" [ + partation: string +] + +# Set the active slot. +export extern "fastboot set_active" [ + slot_name: string +] + +# Execute OEM-specific command. +export extern "fastboot oem" [ + command: string +] + +# Wipe a GSI installation (fastbootd only). +export extern "fastboot gsi wipe" [] + +# Disable a GSI installation (fastbootd only). +export extern "fastboot gsi disable" [] + +# Show status of a GSI installation (fastbootd only). +export extern "fastboot gsi status" [] + +# Wipe the super partition. This will reset it to contain an empty set of default dynamic partitions. +export extern "fastboot wipe-super" [ + super_empty: string +] + + +# Create a logical partition with the given name and size, in the super partition. +export extern "fastboot create-logical-partition" [ + name: string + size: string +] + +# Change the size of the named logical partition. +export extern "fastboot resize-logical-partition" [ + name: string + size: string +] + +# Delete a logical partition with the given name. +export extern "fastboot delete-logical-partition" [ + name: string +] + +# On devices that support snapshot-based updates, cancel an in-progress update. This may make the device unbootable until it is reflashed. +export extern "fastboot snapshot-update cancel" [] + +# On devices that support snapshot-based updates, finish an in-progress update if it is in the "merging" phase. +export extern "fastboot snapshot-update merge" [] + +# Fetch a partition image from the device. +export extern "fastboot fetch" [ + PARTITION: string + OUT_FILE: string +] + +# Download and boot kernel from RAM. +export extern "fastboot boot" [ + kernel: string + ramdisk?: string + second_ramdisk?: string +] + +# Create boot image and flash it. +export extern "fastboot flash:raw" [ + partation: string + kernel: string + ramdisk?: string + second_ramdisk?: string + --dtb:string # Specify path to DTB for boot image header version 2. + --cmdline:string # Override kernel command line. + --kernel-offset:string # Set kernel offset (default: 0x00008000). + --ramdisk-offset:string # Set ramdisk offset (default: 0x01000000). + --tags-offset:string # Set tags offset (default: 0x00000100). + --dtb-offset:string # Set dtb offset (default: 0x01100000). + --page-size:string # Set flash page size (default: 2048). + --header-version:string # Set boot image header version. + --os-version:string # Set boot image OS version (default: 0.0.0). MAJOR[.MINOR[.PATCH]] + --os-patch-level: string # Set boot image OS security patch level. YYYY-MM-DD +] + +# Sends given file to stage for the next command. +export extern "fastboot stage" [ + IN_FILE: string +] + + +# Writes data staged by the last command to a file. +export extern "fastboot get_staged" [ + OUT_FILE:string +] + +export extern "fastboot" [ + -w # Wipe userdata. + -s: string # Specify a USB/Network device. [ SERIAL | tcp|udp:HOST[:PORT] ] + -S:string # Break into sparse files no larger than SIZE. SIZE[K|M|G] + --force # Force a flash operation that may be unsafe. + --slot: string # Use SLOT; 'all' for both slots, 'other' for non-current slot (default: current active slot). + --set-active:string # Sets the active slot before rebooting. + --skip-secondary # Don't flash secondary slots in flashall/update. + --skip-reboot # Don't reboot device after flashing. + --disable-verity # Sets disable-verity when flashing vbmeta. + --disable-verification # Sets disable-verification when flashing vbmeta. + --disable-super-optimization # Disables optimizations on flashing super partition. + --disable-fastboot-info # Will collects tasks from image list rather than $OUT/fastboot-info.txt + --fs-options # Enable filesystem features. OPTION supports casefold, projid, compress + --unbuffered # Don't buffer input or output. + --verbose(-v) # Verbose output. + --version # Display version. + --help(-h) # Show help message. + +] \ No newline at end of file diff --git a/custom-completions/fastboot/readme.md b/custom-completions/fastboot/readme.md new file mode 100644 index 00000000..9db2847b --- /dev/null +++ b/custom-completions/fastboot/readme.md @@ -0,0 +1,24 @@ +# SDK Platform Tools completions + +A Nushell extern definition and completers for [SDK Platform Tools `fastboot`](https://developer.android.com/tools/releases/platform-tools). + + +This module provides extern definitions for almost all of the `fastboot` commands and their flags. + +## Usage + +simply import the extern definitions with + +```nu +use path/to/fastboot-completions.nu * # don't forget the star `*` +``` + +or + +```nu +source path/to/fastboot-completions.nu +``` + +Once imported completions will be available for commands, flags, options, and some values as well. +Display the commands by entering the `→ tab` key in the command line after `fastboot` or any of it's command options. +