说明你的repo好久没有更新了,解决办法就是更新repo工具,然后重新执行。
error: Failed connect to android.googlesource.com:443;Connection refused while accessinghttps://android.googlesource.com/a/platform/frameworks/base/info/refs
fatal: HTTP request failed
error: Cannot fetch platform/tools/motodev
error: Cannot fetch platform/frameworks/base
error: Cannot fetch platform/prebuilts/sdk
error: Exited sync due to fetch errors
等错误信息。
解决方法:编辑/etc/hosts文件
$ vim /etc/hosts
增加下面内容,保存
74.125.31.82 android.googlesource.com
74.125.31.82 www.googlesource.com
203.208.46.172 cache.pack.google.com
59.24.3.173 cache.pack.google.com
然后重新输入
$ repo sync
注:上述地址可能随时有变,需要通ping来测试,能通的写进hosts才有效果
ubuntu12.04可以通过添加如下源来下载sun java
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
|
方法:
1
|
sudo gedit /etc/apt/sources.list
|
在ubuntu12.04编译低版本的android是需要使用java1.5的,而ubuntu12.04安装的默认版本是java1.6
所以需要将其更改为1.5。首先通过apt-get安装好java1.5(参考source.android.com)。然后使用命令
update-alternatives --config java update-alternatives --config javac
make流程参考:http://source.android.com/source/building.html
在make过程中可能会碰到下列问题:
编译出错1
frameworks/base/libs/utils/RefBase.cpp: 在成员函数‘void android::RefBase::weakref_type::trackMe(bool, bool)’中: frameworks/base/libs/utils/RefBase.cpp:507:67: 错误: 将‘const android::RefBase::weakref_impl’作为‘void android::RefBase::weakref_impl::trackMe(bool, bool)’的‘this’实参时丢弃了类型限定 [-fpermissive] make[1]: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] 错误 1
解决办法:编辑frameworks/base/libs/utils/Android.mk文件,修改
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
为
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
编译出错2
<命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werror] <built-in>:0:0: 附注: 这是先前定义的位置 cc1plus: all warnings being treated as errors make[1]: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1
修改build/core/combo/HOST_linux-x86.mk line 61:
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0 改为 HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
编译出错3
make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45
这是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译,因为Google的一个员工更新了几个文件。这里可以看到详细的修改记录:http://android.git.kernel.org/?p=platform/external/clearsilver.git;a=commitdiff;h=d36910a8110d8377b22301274d2b5131a732a72b
修改这几个文件,该回到32位编译环境即可:
external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk
把编译选项-m64改成-m32即可
需要修改环境变量,可将android源码开始的
out/host/linux-x86/bin
添加到
/etc/environment中
然后在/etc/environment中添加
export ANDROID_PRODUCT_OUT="~/android/out/target/product/generic"