fb-adb is a tool for interacting with Android systems. It does much of what adb does, but with better remote shell support and, hopefully, fewer bugs. Differences between adb and fb-adb are that fb-adb:
- is binary clean (no LF -> CRLF mangling)
- transmits and updates window size
- distinguishes standard output and standard error
- properly muxes streams with independent flow control
- allows for ssh-like pty allocation control
- propagates program exit status instead of always exiting with status 0
- properly escapes program arguments
- kills remote program
- provides a generic facility to elevate to root without re-escaping
DOWNLOADS
You can use Homebrew to install fb-adb binaries:
brew install fb-adb
BUILDING
An out-of-tree build is required. You'll need a copy of the Android NDK: tell configure about it by setting the ANDROID_NDK
environment variable to your NDK path or by using the --with-android-ndk
argument to the configure script.
For example:
./autogen.sh export ANDROID_NDK=/path/to/android-ndk mkdir build cd build ../configure make
If building on Mac, you need gmake
to build. You can use Homebrew to get it:
brew tap homebrew/dupes brew install homebrew/dupes/make
and then use gmake
instead of make
.
RUNNING
The fb-adb executable itself has no dependencies other than the adb executable, which must be on PATH
. Generally, you can use fb-adb just like adb; fb-adb forwards unknown commands to adb. fb-adb supports the same device-selection options that adb does.
fb-adb shell
is the fancy shell command that supports the features described above. Run fb-adb shell -h
for additional options.
EXAMPLES
-
Capture a screenshot from device and write it locally to a timestamped file:
fb-adb rcmd screencap -p > screenshot-$(timestamp).png
-
Dump
database.db
of thecom.bar.foo
app:fb-adb rcmd -u com.bar.foo sqlite3 /data/data/com.bar.foo/databases/database.db .d
-
Open remote shell as the user
com.bar.foo
:fb-adb shell -u com.bar.foo