I want to use ADB (Android Debug Bridge) on my Raspberry Pi.
How can I setup it up?
Raspberry Pi Stack Exchange is a question and answer site for users and developers of hardware and software for Raspberry Pi. It only takes a minute to sign up.Sign up to join this community
I ran accross this problem 1-2 years ago and after a long search I ended up compiling adb myself. Also, because the available adb binaries are outdated. I needed adb v1.0.32 and I could find only v1.0.29. Other adb binaries I found did not work because they were build for other CPU platforms (i.e. not ARM).
So lets compile adb on the Raspberry Pi itself - without any cross-compiling madness. It was actually easier than you'd think. All you should need is git and gcc (and the package libssl-dev, which is installed by the bash script).
Using some steps from here I made the following 2 files
#!/bin/bash # some steps found here: http://android.serverbox.ch/?p=1217 sudo apt-get install libssl-dev mkdir -p ~/adb-dev/5.1.1 cd ~/adb-dev/5.1.1 mkdir system mkdir external cd system/ git clone -b android-5.1.1_r1 https://android.googlesource.com/platform/system/core git clone -b android-5.1.1_r1 https://android.googlesource.com/platform/system/extras cd ../external/ git clone -b android-5.1.1_r1 https://android.googlesource.com/platform/external/zlib git clone -b android-5.1.1_r1 https://android.googlesource.com/platform/external/openssl git clone -b android-5.1.1_r1 https://android.googlesource.com/platform/external/libselinux cd ../system/core/adb cp ~/adb-dev/Makefile . echo "Ready to hit *make* now and pray?" read -rsp $'Press any key to continue...\n' -n1 key
Makefile (place into ~/adb-dev/Makefile before running other script)
# standalone Makefile for adb # found on: http://android.serverbox.ch/?p=1217 # this works with android-5.1.1_r1 SRCS+= adb.c SRCS+= fdevent.c SRCS+= adb_client.c SRCS+= commandline.c SRCS+= console.c SRCS+= file_sync_client.c SRCS+= get_my_path_linux.c SRCS+= services.c SRCS+= sockets.c SRCS+= transport.c SRCS+= transport_local.c SRCS+= transport_usb.c SRCS+= usb_linux.c SRCS+= usb_vendors.c SRCS+= adb_auth_host.c VPATH+= ../libcutils SRCS+= socket_inaddr_any_server.c SRCS+= socket_local_client.c SRCS+= socket_local_server.c SRCS+= socket_loopback_client.c SRCS+= socket_loopback_server.c SRCS+= socket_network_client.c SRCS+= load_file.c VPATH+= ../libzipfile SRCS+= centraldir.c SRCS+= zipfile.c VPATH+= ../../../external/zlib/src SRCS+= adler32.c SRCS+= compress.c SRCS+= crc32.c SRCS+= deflate.c SRCS+= infback.c SRCS+= inffast.c SRCS+= inflate.c SRCS+= inftrees.c SRCS+= trees.c SRCS+= uncompr.c SRCS+= zutil.c CPPFLAGS+= -DADB_HOST=1 CPPFLAGS+= -DHAVE_FORKEXEC=1 CPPFLAGS+= -DHAVE_SYMLINKS CPPFLAGS+= -DHAVE_TERMIO_H CPPFLAGS+= -DHAVE_SYS_SOCKET_H CPPFLAGS+= -D_GNU_SOURCE CPPFLAGS+= -D_XOPEN_SOURCE CPPFLAGS+= -I. CPPFLAGS+= -I../include CPPFLAGS+= -I../../../external/zlib CPPFLAGS+= -I../../../external/openssl/include # so well, let's fake HAVE_OFF64_T, because Raspbian does not. # just stay away from files larger than 2GB, ok? CFLAGS+= -O2 -g -Wno-unused-parameter -DHAVE_OFF64_T LIBS= -lcrypto -lpthread -lrt # old cross-compiler stuff #TOOLCHAIN= /opt/poky/1.5/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi- #CC= $(TOOLCHAIN)gcc #LD= $(TOOLCHAIN)gcc TOOLCHAIN= /usr/bin/ CC= $(TOOLCHAIN)gcc LD= $(TOOLCHAIN)gcc OBJS= $(SRCS:.c=.o) all: adb adb: $(OBJS) $(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS) clean: rm -rf $(OBJS)
Run the first bash script directly on your Raspberry Pi. Once it is finished, run
make. This should compile the adb binary right on the Pi using Android 5.1.1 R1 sources - no cross-compiling environment needed!
Remark: My comment in the Makefile
# so well, let's fake HAVE_OFF64_T, because Raspbian does not. # just stay away from files larger than 2GB, ok?
I have never tested the "2GB problem", so I don't know how my adb build will behave, i.e. when you do
adb push verylarge4GBfile.img. Maybe files larger than 2GB will work nonetheless - maybe not. Please let me know if you ever come across any problems in regards to this possible limitation.
I am running my adb binary on around 20-30 Raspberry Pi (v2 and v3) without any problems since approx. 2 years. It is used on a variety of android phones, but mostly android 4.4.x and android 5.1.x phones. Especially
adb forward is working perfectly (which was not available in adb v1.0.29 as far as I remember).
adb push with ~1GB files works fine too.
UPDATE: Sorry for the broken tabs/spaces in the Makefile above. I don't know how to fix this here, you'll have to fix it in the editor of your choice.
I was not able to compile any recent adb for arm on a Raspberry Pi so far, even after upgrading to Raspbian 10/buster which offers
It also comes with
adb v1.0.39, 1:8.1.0+r23-5.
And to my surprise,
Raspbian 11/bullseye actually includes
adb v1.0.41, 28.0.2-debian
Even better, bullseye is also available for arm64 now!
This thread from the XDA Forums ("ADB for Raspberry Pi") might be helpful; a user there managed to compile ADB and produced a binary for it.
The binary itself can be downloaded from this page.
After unpacking using
p7zip -d <file.7z> and copying the binary file mypart/out/host/linux-armv6l/bin/adb to /usr/bin it seems to be working fine on a RPi.
(I didn't have much time to compile it myself just for the test, but instructions should be on the page mentioned above)