本文按照谷歌官网()的要求搭建环境,不同之处,以作记录。
1. sun-java6-jdk更新报错
-
root@jason-desktop:~# sudo apt-get install sun-java6-jdk
-
Reading package lists... Done
-
Building dependency tree
-
Reading state information... Done
-
Package sun-java6-jdk is not available, but is referred to by another package.
-
This may mean that the package is missing, has been obsoleted, or
-
is only available from another source
-
E: Package sun-java6-jdk has no installation candidate
按照该文()的意思是让我们安装openjdk-6-jdk。但是还是按照谷歌推介的软件安装比较稳妥。查资料知,可按如下方法安装sun-java6-jdk。
-
1、添加这个源:
-
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse。
-
-
方法:
-
sudo gedit /etc/apt/sources.list
-
打开源列表,在最后一行添加
-
deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse。保存退出。
-
-
2、sudo apt-get update
-
-
3、sudo apt-get install sun-java6-jdk
2. 获取Android源码“repo sync”一步时报错
解决方法
a. 浏览器登录,并用gmail帐号登录;
b. 点击网页上的“允许访问”,得到类似
-
machine android.googlesource.com login git-<userName>.gmail.com password <password>
-
machine android-review.googlesource.com login git-<userName>.gmail.com password <password>
c. 把上面那段信息追加到~/.netrc文件结尾(请检查当前用户的权限, 如果不存在此文件则自己新建一个,我是在登录用户root目录下新建了一个,即mkdir /root/.netrc,然后把上述信息拷贝到该文件里);
d. 下载地址的URI更改为a/platform/manifest(中间加上了“/a”)。
e. repo init -u a/platform/manifest -b android-2.3.4_r1
f. repo sync
官方的说法是:因为访问基本是匿名的,为了防止连接过多(指内网/虚拟机),对同一IP地址的连接数做了一定的限制。看来是用gmail帐号进行认证。
这样的话,在公司网络内或者用虚拟机下载的话,会经常遇到这问题。
3.
因为Android2.3默认是64位的系统上编译,需要手动修改build/core/main.mk,把这个判断部分注释掉:
#ifneq (64,$(findstring 64,$(build_arch)))
#$(warning ************************************************************)
#$(warning You are attempting to build on a 32-bit system.)
#$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
#$(warning ************************************************************)
#$(error stop)
#endif
修改这几个文件,该回到32位编译环境即可:
external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk
把编译选项-m64改成-m32即可
ubuntu 11.10的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.3。
通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。
ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
装完后在/usr/bin目录下
$ ls -l gcc*
lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
发现gcc 链接到gcc-4.6, 需要将它改为链接到gcc-4.4 :
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
同理
ls -l g++*
lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要将g++链接改为g++-4.4:
/usr/bin$ sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.4 g++
再查看gcc和g++版本号:gcc -vg++ -v均显示gcc version 4.4.6 ,说明gcc 4.4安装成功。
问题2:
frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing ‘const android::RefBase::weakref_impl’ as ‘this’ argument of ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’ discards qualifiers [-fpermissive] make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1
如下解决:
$ gedit frameworks/base/libs/utils/Android.mk
将下面一行
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
改成
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
xin!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
:0:0: note: this is the location of the previous definition
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
此处编译错误是因为ubuntu 11.10采取了GCC4.6.1导致的。
解决办法:
批改源码目次下/build/core/combo/HOST_linux-x86.mk文件:
将以下语句
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
批改为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
1.只保留错误信息:
make ... 2>log.txt #(注意2和>之间不要空格)
2.保留错误信息和警告信息:
make ... > log.txt 2>&1
阅读(2804) | 评论(0) | 转发(1) |