下載Android源碼之後,這裡以Android 2.3(gingerbread)為例,編譯時間可能會遇到的一些問題,下面來總結下這些常見的問題以及解決方案。
1.make: *** No rule to make target `run-java-tool', needed by `out/target/common/docs/doc-comment-check-timestamp'. Stop.
這是由於沒有設定$ANDROID_JAVA_HOME 造成的,只要設定下ANDROID_JAVA_HOME即可。
解決辦法:
執行
export ANDROID_JAVA_HOME=$JAVA_HOME
2.build/core/main.mk:73: You are attempting to build on a 32-bit system.
build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
這是因為Android2.2(froyo)之後預設只支援64-bit。
解決辦法:
將
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
這四個檔案中的
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
注釋掉,或者將“64”換成“32”
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
然後,將
./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改為:
ifneq (i686,$(findstring i686,$(build_arch)))
即可。
3.make: *** [out/target/product/generic/obj/lib/crtbegin_dynamic.o] Error 1
這是在32位Linux上編譯引起的arm-eabi-4.4.3版本問題,所以需要修改,這裡我們使用arm-eabi-4.4.0版本編譯器,建立一個軟連結。
解決辦法:
在./prebuilt/linux-x86/toolchain中執行
$ mv arm-eabi-4.4.3 arm-eabi-4.4.3.old
$ ln -s arm-eabi-4.4.0 arm-eabi-4.4.3
即可。
4.make: *** [out/target/product/generic/obj/EXECUTABLES/BufferQueue_test_intermediates/LINKED/BufferQueue_test] Error 1
解決辦法:
把system/media/opensles/libopensles目錄下的IAndroidEffect.c改為IAndroidEffect.cpp,並且把Android.mk中的內容“IAndroidEffect.c”也一併修改為”IAndroidEffect.cpp“。