这个是自己搭建编译环境的过程中遇到的一些问题,如果你也遇到同样的问题可以参考下。
ubuntu14.04下搭建Android编译环境
目的:使用ubuntu14.04 server版本搭建Android编译环境;
步骤:
1、安装Vmware虚拟机;
2、下载ubuntu14.04服务器版本镜像,并安装ubuntu14.04虚拟机;
3、安装完成后设置网络以及网络的代理(只有一个IP有上网权限):
设置静态IP修改/etc/network/interfaces,内容如下:(不一一解释,可网上查询)
auto eth0
iface eth0 inet static
address 192.168. *.*
netmask 255.255.255.0
gateway 192.168.*.*
修改/etc/profile,在该文件最后添加如下内容:
export http_proxy=http://192.168.*.*:808
export https_proxy=http://192.168.*.*:808
export ftp_proxy=http://192.168.*.*:808
export no_proxy=http://192.168.0.0/16
在/etc/apt/目录下添加apt.conf文件,内容如下
Acquire::http::proxy "http://192.168.12.50:808";
Acquire::ftp::proxy"http://192.168.12.50:808";
Acquire::https::proxy"http://192.168.12.50:808";
Acquire::no::proxy"http://192.168.0.0/16";
http://192.168.*.*:808依据自己的代理服务器设置;http://192.168.0.0/16和本地通信不适用代理设置。设置好IP之后,执行sudoufw disable关闭防火墙(也可以自己按照需求设置防火墙功能);
4、执行“sudoapt-get update”(不执行这一步骤,apt-get无法在线获取安装包)
5、安装习惯的编译工具VIM;执行“sudo apt-get install vim”;
6、到目前为止是没法连接ssh的,因为服务器版本中没有ssh-server,所以我们要先安装一个ssh-server,执行“sudo apt-get install openssh-server”;
7、是不是想到也要安装samba了呢 ,现在就安装上吧,执行“sudo apt-get install samba”;
8、安装Android的编译环境,执行以下命令:
wgethttp://openlinux.amlogic.com:8000/deploy/CodeSourcery.tar.gz -P /tmp/
tar -zxvf/tmp/CodeSourcery.tar.gz -C /opt
wgethttp://openlinux.amlogic.com:8000/deploy/gnutools.tar.gz -P /tmp
tar -zxvf/tmp/gnutools.tar.gz -C /opt
wget http://openlinux.amlogic.com:8000/deploy/arc_gnutools.sh -P /etc/profile.d
wgethttp://openlinux.amlogic.com:8000/deploy/arm_path.sh -P /etc/profile.d
wgethttp://openlinux.amlogic.com:8000/deploy/repo -P /usr/bin
chmod +x /usr/bin/repo
9、从服务器将版本copy到自己的服务器上:
scp -r [email protected]:/home/username/path ./本地目录
10、根据错误提示安装所缺少的文件如下:
sudo apt-get install make liblzo2-devbison lsb-core default-jdk ecj gcj-4.8-jdk openjdk-7-jdk openjdk-6-jdk git flexgit-core gnupg gperf build-essential zip curl zlib1g-dev gcc-multilibg++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-devlib32z-dev libswitch-perl
出现一下错误:
Your version is: java version "1.6.0_24".
The correct version is: Java SE 1.6.
Please follow the machine setup instructions at
http://source.android.com/source/download.html
************************************************************
build/core/main.mk:131: *** stop. Stop.
sudo update-alternatives --configjava
There are 3 choices for the alternative java (providing/usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 auto mode
1 /usr/bin/gij-4.8 1048 manual mode
2 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 manual mode
3 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
Press enter to keep the current choice[*], or typeselection number: 2
sudo update-alternatives --configjavac
There are 4 choices for the alternative javac (providing/usr/bin/javac).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1071 auto mode
1 /usr/bin/ecj 143 manual mode
2 /usr/bin/gcj-wrapper-4.8 1048 manual mode
* 3 /usr/lib/jvm/java-6-openjdk-amd64/bin/javac 1061 manual mode
4 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1071 manual mode
Press enter to keep the current choice[*], or typeselection number:3
以上内容安装完成之后,编译过程中出现以下问题及解决方案:
Can't locate Switch.pm in @INC (you may need to install theSwitch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2/usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18/usr/share/perl/5.18 /usr/local/lib/site_perl .) atexternal/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.plline 23.
target Generated: libwebcore <=external/webkit/Source/WebCore/platform/ColorData.gperf
make: ***[out/target/product/f16ref/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/html/DocTypeStrings.cpp]Error 2
make: *** Waiting for unfinished jobs....
Can't locate Switch.pm in @INC (you may need to install theSwitch module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2/usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18/usr/share/perl/5.18 /usr/local/lib/site_perl .) atexternal/webkit/Source/WebCore/make-hash-tools.pl line 23.
BEGIN failed--compilation aborted atexternal/webkit/Source/WebCore/make-hash-tools.pl line 23.
make: *** [out/target/product/f16ref/obj/STATIC_LIBRARIES/libwebcore_intermediates/Source/WebCore/platform/ColorData.cpp]Error 2
target Generated: libwebcore <=external/webkit/Source/WebCore/html/parser/HTMLEntityNames.in
make: *** wait: No child processes. Stop.
sudo apt-get install libswitch-perl
build/tools/acp/acp.c:1:0: note: this is the location ofthe previous definition /*
sudo apt-get install gcc-4.4 g++-4.4g++-4.4-multilib
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/bin/g++
make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex]Killed
方法一:
java-Xms3550M -Xmx3550M -jar /home/test/4.0/out/host/linux-x86/framework/dx.jar--dex--output=out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex--core-library out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes.jar
方法二:
方法二:
修改definitions.mk文件此文件位于build/core/目录下
修改变量:transform-classes.jar-to-dex中的-JXms16M-JXmx1024M值
代码中的变量定义:
definetransform-classes.jar-to-dex
@echo "target Dex: $(PRIVATE_MODULE)"
@mkdir -p $(dir $@)
$(hide) $(DX) \
$(if $(findstring windows,$(HOST_OS)),,-JXms16M-JXmx1024M) \
--dex --output=$@ \
$(if $(NO_OPTIMIZE_DX), \
--no-optimize) \
$(if $(GENERATE_DEX_DEBUG), \
--debug --verbose \
--dump-to=$(@:.dex=.lst) \
--dump-width=1000) \
$(PRIVATE_DX_FLAGS) \
$<
endef
将-JXms16M -JXmx1024M 修改成适当的值
我的机器是内存是32G的,我将-JXms16M-JXmx1024M修改为-JXms1024M-JXmx2048M
具体值的大小要根据具体机器的内存而定,内存太少设置的值大一样会出现问题。
[out/host/linux-x86/obj/EXECUTABLES/grxmlcompile_intermediates/grxmlcompile.o]Killed
sudo apt-get installlibncurses5-dev
MSTAR编译失败:
./check_mmap.sh: 66:./check_mmap.sh: Syntax error: "(" unexpected (expecting"}")
解决方法:
执行$sudo dpkg-reconfigure dash命令,并选择“否”
./mkfs.ubifs: error while loadingshared libraries: liblzo2.so.2: cannot open shared object file: No
sudo apt-get install liblzo2-dev:i386
./mkfs.ubifs: error while loadingshared libraries: libuuid.so.1: cannot open shared object file: No such file ordirectory
sudo apt-get install uuid-dev:i386
安装NFS服务器
一、NFS安装
$ sudo apt-get install nfs-kernel-server nfs-commonportmap
二、NFS配置
2.1 配置/etc/exports文件
$ sudo vim /etc/exports
在文件最后加入如下内容:
/home*(rw,sync,no_root_squash)
注:nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。其中:/rootnfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
nfs常用的参数有:
ro 只读访问
rw 读写访问sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
三、重启服务
$ sudo /etc/init.d/nfs-kernel-server restart
四、测试
4.1 显示出共享出来的目录
$ showmount -e
4.2 将nfs的rootnfs目录挂载到本地磁盘上。
$ sudo mount -t nfs localhost:/rootnfs /mnt
4.3 查看挂载情况
$ df
4.4 卸载挂载
$ sudo umount /mnt
五、完成
gcc: error tryingto exec 'cc1': execvp: No such file or directory
sudo apt-get purge gcc
sudo apt-get install gcc