Skip to main content
3 of 6
example of how i use the adb binary, requirements for the build, a bit more text here and there
Eugen
  • 488
  • 3
  • 12

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).

Sp 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

  1. adb-compile-env-setup.sh

     #!/bin/bash
    
     # some steps found here: http://android.serverbox.ch/?p=1217
    
     sudo apt-get install libssl-dev
    
     mkdir ~/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
    
  2. Makefile (place into ~/adb-dev/Makefile)

     # 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.

Eugen
  • 488
  • 3
  • 12