交叉编译adb-tools
# souce build/envsetup.sh
# lunch user-debug
一、交叉编译openssl库
1.下载openssl
# git clone https://github.com/openssl/openssl.git
2.编译
# mkdir output
# ./config no-asm -shared --prefix=$(pwd)/output
说明:no-asm 在交叉编译过程中不使用汇编代码代码加速编译过程。
-shared 生成动态链接库。
--prefix 指定安装编译生成文件的路径,如不指定则默认为当前目录。
<1>.将根目录下Makefile第74行 “CROSS_COMPILE=” 改为: “CROSS_COMPILE=aarch64-linux-android-”
<2>.找到Makefile中有 “-m64” 的地方,全删了(共2处)。
//链接交叉编译器.so系统库位置
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9
//链接交叉编译器.h系统头文件位置
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include
<3>.如果编译报错没有.h文件报错解决:
# cp prebuilts/ndk/current/platforms/android-21/arch-arm64/usr/include/* prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include
<4>.如果编译报错没有.so文件报错解决:
# cp prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9 prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/
# make -j16
<5>.编译完成后生成:libcrypto.so、libssl.so,拷贝到交叉编译器.so系统库位置
# cp libcrypto.so libssl.so prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9
<6>.头文件拷贝到交叉编译器.h系统头文件位置
# cp -rf openssl/include prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9/include
二、交叉编译zlib-1.2.8库
1.下载zlib-1.2.8
# git clone https://github.com/fmrico/zlib-1.2.8.git
2.编译
# mkdir output
# ./configure —-prefix=$(pwd)/output
<1>.修改Makefile
TOOLSCHAIN=aarch64-linux-android-
将CC=gcc 改为: CC=$(TOOLSCHAIN)gcc
<2>.将Makefile出现gcc的地方全部改为:$(CC)
将gcc全部改为:$(CC)
<3>.将
AR=ar
RANLIB=ranlib
改为:
AR=$(TOOLSCHAIN)ar
RANLIB=$(TOOLSCHAIN)ranlib
# make -j16
<4>拷贝.so库到交叉编译系统库
# mv libz.so.1.2.8 libz.so
# cp libz.so prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/lib/gcc/aarch64-linux-android/4.9
三、android-tools
1.下载android-tools会有三个core debian extras目录
# git clone https://git.launchpad.net/~phablet-team/+git/android-tools
2.编译
# cp debian/makefiles/adb.mk core/adb/
# cd core/adb
# mv adb.mk Makefile
<1>.修改Makefile
CC=aarch64-linux-android-gcc
VPATH+= ../adb
SRCS+= adb.c
SRCS+= console.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= commandline.c
SRCS+= adb_client.c
SRCS+= adb_auth_host.c
SRCS+= sockets.c
SRCS+= services.c
SRCS+= file_sync_client.c
SRCS+= get_my_path_linux.c
SRCS+= usb_linux.c
SRCS+= usb_vendors.c
SRCS+= fdevent.c
VPATH+= ../libcutils
SRCS+= load_file.c
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
CPPFLAGS+= -DADB_HOST=1
CPPFLAGS+= -DHAVE_FORKEXEC=1
CPPFLAGS+= -DHAVE_SYMLINKS
CPPFLAGS+= -DHAVE_TERMIO_H
CPPFLAGS+= -I.
CPPFLAGS+= -I../adb
CPPFLAGS+= -I../include
CPPFLAGS+= -I../../../external/zlib
LIBS+= -fPIC -pie -fPIE -lc -lcrypto -lz -pthread
OBJS= $(SRCS:.c=.o)
all: adb
adb: $(OBJS)
$(CC) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
clean:
rm -rf $(OBJS) adb
<2>.注释掉:ret = getlogin_r(username, sizeof(username));
# emacs android-tools/core/adb/adb_auth_host.c
注释掉即可:
//ret = getlogin_r(username, sizeof(username));
# make -j16
编译出adb libcrypto.so libssl.so libz.so等库,把他们push到/system/bin和/system/lib64即可。
这样Android就可以作为host运行adb,可能和本机的adbd端口(改端口号)冲突,可先杀死adbd即可.