编译环境:Fedora 20 x64
目标环境:Windows
编译版本:Android Kitkat 4.4
编译前需要先准备mingw32,先是使用yum来安装1
yum install mingw32*
结果它给我装了个w64的mingw,使用这个来编译总是会有各种莫名其妙的错误,如”int OCSP REQUEST expected declaration specifiers or ‘…’ before ‘(‘ token“等等,猜想是mingw的问题。
结果还是去sourceforge下载 传送门
下载好后执行x86-mingw32-build.sh按步骤安装即可。需要注意的是下载安装包的时候选择 ” 1) jaist (JP)“ 即可,目前电信走条路比较快,如果较慢可以选择其他。
一路下一步就可以了。
编译脚本下载的binutils版本为2.19.1,此东西编译后会产生一堆用于编译的工具,像汇编器as,链接器ls等
有一个注意点,先提及,使用mingw32下载的binutils编译android-tools的过程中,可能会出现1
ld: Dwarf Error: found dwarf version '4', this reader only handles version 2 and 3 information
之类在错误,这是因为binutils版本过低引起的。去 传送门 下载新的,目前最新搂2.24。 将其替换掉mingw32下载的 binutils-2.19.1-src.tar.gz 文件,就可以不用再去下载了。
这时,编译for windows的android-sdk工具就已经准备好了,去到Kitkat源目录,在编译之前需要先修改编译文件,到目录./build/core/combo下,找到HOST_windows-x86.mk文件,此文件为定义编译for win的说明文件。 修改的内容主要是编译所需要用到的编译器,头文件,库等等的位置信息,修改”# Settings to use MinGW has a cross-compiler under Linux“下的内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# Settings to use MinGW has a cross-compiler under Linux
ifneq ($(findstring Linux,$(UNAME)),)
ifneq ($(strip $(USE_MINGW)),)
HOST_ACP_UNAVAILABLE := true
TOOLS_EXE_SUFFIX :=
HOST_GLOBAL_CFLAGS += -DUSE_MINGW
ifneq ($(strip $(BUILD_HOST_64bit)),)
TOOLS_PREFIX := /media/Data/mingw32/bin/i386-mingw32-
HOST_C_INCLUDES += /media/Data/mingw32/include
HOST_GLOBAL_LD_DIRS += -L/media/Data/mingw32/lib
else
TOOLS_PREFIX := /media/Data/mingw32/bin/i386-mingw32-
HOST_C_INCLUDES +=/media/Data/mingw32/include
HOST_C_INCLUDES +=/media/Data/mingw32/include/ddk
HOST_GLOBAL_LD_DIRS += -L/media/Data/mingw32/lib
endif # BUILD_HOST_64bit
endif # USE_MINGW
endif # Linux
HOST_CC := $(TOOLS_PREFIX)gcc$(TOOLS_EXE_SUFFIX)
HOST_CXX := $(TOOLS_PREFIX)g++ -static-libgcc$(TOOLS_EXE_SUFFIX)
HOST_AR := $(TOOLS_PREFIX)ar$(TOOLS_EXE_SUFFIX)
需要说明的是”ifneq ($(strip $(BUILD_HOST_64bit)),)“上下的两个判断都需要修改,if通过的部分为当前为64位系统下的情况底下会调用,但else的部分发现在一开始的时候也会使用,为了不引起麻烦,还是一次过配置。
命令就一次过吧:1
2
3
4
5ccache -M 50G
source build/envsetup.sh
lunch sdk-eng
make adb
make USE_MINGW=y adb
第一次需要先make一次linux下的adb,不make的话可以看看会出现什么。
最后使用strip压缩一下可执行文件即可
另外,编译SDK是1
2make PRODUCT-sdk-sdk
make USE_MINGW=y PRODUCT-sdk-win_sdk