用vs2008编译adb步骤
编译adb的时候要编译三个部分:AdbWinApi.dll,AdbWinUsbApi.dll和adb.exe。由于三个之间存在依赖关系,所以编译的顺序不能乱,依次为AdbWinApi.dll,AdbWinUsbApi.dll和adb.exe。
在我开始着手编译之前,网上关于在vs2008的编译步骤说明很少,基本都是现成配置好的工程文件,但其实这些编译好的工程文件参考价值并不大。
通过翻墙顺利下载完android的源码,发现google的文档写的真的很仔细,只要按照说明文档基本就可以搞定,不用像无头苍蝇一样到处百度谷歌,无从下手。
1.
这部分的源码位置在development\host\windows\usb\api。编译这部分只要参考BUILDME.txt和SOURCES这两个文本文档就可以了。这两个文档详细告诉了编译的注意事项和配置,按照文档配置到vs2008工程当中就可以直接编译了,基本一帆风顺。
2.
这部分的源码位置在development\host\windows\usb\winusb。编译这部分的步骤与AdbWinApi.dll一样,同样参考文件下的BUILDME.txt和SOURCES这两个文件。
3.
编译adb是最麻烦的,绝大部分的时间都花在这个时间了。这部分的源码位置在system\core\adb下面,在这个目录中,OVERVIEW.TXT对adb的机制做了一个介绍,protocol.txt介绍了adb与adbd之间的通信协议,SERVICES.TXT介绍了adb的命令。
编译这部分的时候我参考的是Android.mk,这个文件的语法和makefile的语法差不多,按照这个里面的说明进行编译的。这个文档介绍了三种编译,只要选第一个就好了。编译的时候我按照Android.mk文档中的说明,一个一个文件编译的,否则所有文件中一起编译,错误太多眼花缭乱的。
下面列出编译adb所需要的文件
文件名称 |
andriod源码位置 |
备注 |
adb.c |
system\core\adb |
|
adb_auth_host.c |
system\core\adb |
|
adb_client.c |
system\core\adb |
|
centraldir.c |
system\core\libzipfile |
|
commandline.c |
system\core\adb |
|
console.c |
system\core\adb |
|
file_sync_client.c |
system\core\adb |
|
get_my_path_windows.c |
system\core\adb |
|
list.c |
system\core\libcutils |
|
services.c |
system\core\adb |
|
sockets.c |
system\core\adb |
|
sysdeps_win32.c |
system\core\adb |
|
transport.c |
system\core\adb |
|
transport_local.c |
system\core\adb |
|
transport_usb.c |
system\core\adb |
|
usb_vendors.c |
system\core\adb |
|
usb_windows.c |
system\core\adb |
|
utils.c |
system\core\adb |
|
zipfile.c |
system\core\libzipfile |
|
下面列出头文件
文件名称 |
andriod源码位置 |
备注 |
adb.h |
system\core\adb |
|
adb_auth.h |
system\core\adb |
|
adb_client.h |
system\core\adb |
|
fdevent.h |
system\core\adb |
|
file_sync_service.h |
system\core\adb |
|
mutex_list.h |
system\core\adb |
|
private.h |
system\core\libzipfile |
|
sysdeps.h |
system\core\adb |
|
transport.h |
system\core\adb |
|
unistd.h |
|
linux系统文件,直接从linux系统上拷贝出来 |
usb_vendors.h |
system\core\adb |
|
utils.h |
system\core\adb |
|
下面是引用的其它文件
文件名称 |
andriod源码位置 |
备注 |
cutils\list.h |
system\core\include |
|
cutils\sockets.h |
system\core\include |
|
mincrypt\rsa.h |
system\core\include |
|
mincrypt\sha.h |
system\core\include |
|
zipfile\zipfile.h |
system\core\include |
|
openssl\*.h |
external |
|
zlib\*.h |
external |
|
usb100.h |
WinDDK\inc\api |
微软官网下载winDDk |
第三方库
文件名称 |
来源 |
备注 |
libeay32MT.lib |
百度下载 |
openssl静态链接库 http://www.openssl.org/ |
ssleay32MT.lib |
百度下载 |
openssl静态链接库 http://www.openssl.org/ |
zdll.lib |
百度下载 |
zlib静态链接库 http://www.openssl.org/ |
ws2_32.lib |
系统库文件 |
|
AdbWinApi.lib |
第一步编译好的库文件 |
|
所需要的宏定义
WIN32
_DEBUG
_CONSOLE
ADB_HOST
HAVE_WIN32_IPC
HAVE_WIN32_PROC
HAVE_WINSOCK
通过上面的步骤adb的整个工程就算创建成功了。下面的话就是编译过程。由于编译器和平台通过,在linux下编译通过在vs2008平台下还要进行修改。这是一个比较繁复的过程。我采用的方法是一个文件一个文件编译,这样不至于报一大堆错误搞得头疼。