本文介绍在WIN7操作系统通过在虚拟机VMWARE和Ubuntu下搭建了一个android2.3/android4.0编译环境的操作过程,包括LINUX系统安装,JDK安装,samba服务和ssh服务安装。因为要下载补丁,需要网络支持,要能够上网。电脑要64位cpu,安装好win7操作系统。
第一步:
下载ubuntu地址:
LINUX有3个版本,分别是server,desktop,alternate
server版本是没有图形界面服务器安装版本。
alternate适合专业个性化定制安装版本,不推荐初学者用这个版本
desktop是定制好的,傻瓜型安装,简单方便。http://releases.ubuntu.com/12.04/ 或者:http://mirrors.ustc.edu.cn/ubuntu-releases/
选择的是64位的镜像: ubuntu-12.04-desktop-amd64.iso http://releases.ubuntu.com/12.04/ubuntu-12.04-desktop-amd64.iso
或者:http://mirrors.ustc.edu.cn/ubuntu-releases//precise/ubuntu-12.04-desktop-amd64.iso (这个链接下载速度要快)
第二步:
下载之后在VMware上安装ubuntu。安装完成后,用update manager更新最新的pach。
在64位WIN7系统安装64位UBUNTU12.04
1,安装vmware8.0.2
2,安装ubuntu
下载 ubuntu-ubuntu-12.04-desktop-amd64
file-->new virtual machine
菜单VM--》setting-->hardware--》CD/DVD-->use ISO image file选择ubuntu-12.04-desktop-amd64
一步一步安装,安装过程要输入主机名字chv210和登录用户名chv210和登录密码,大概两个小时安装完成。
3,点击下拉菜单dash home打开dash home,地址栏输入update,弹出菜单 update manager---->install updates下载安装更新。
下载150M的更新包和安装,慢慢等待。
要打开terminal,按快捷键: Ctrl + Alt + t 即可
4,安装samba
sudo apt-get install samba samba-common
点击菜单ubuntu software center, 地址栏输入samba,选择samba软件,点击install进入安装samba,
安装好samba后,在菜单有个samba图标,点击弹出samba设置菜单,samba--》add a samba share (+号)--》 create samba share
basic--》directory browser --》file system --》home --》chv210 /home/chv210文件夹共享给chv210用户,设置为可以读写(writable visable 打勾)
access--》only allow access specific user 前面打勾--》 在chv210前面打勾
sudo smbpasswd -a chv210
为samba用户设置密码,否则win7不能够访问
5,ifconfig 看看ip地址192.168.241.136
6,在windos 的地址栏\\192.168.241.136 可以看到chv210目录,弹出widows安全对话框,输入samba用户名和密码
7,安装ssh
sudo apt-get install openssh-server openssh-client
在WIN7端连接
secureCRT => Quick Connect, 连接ubuntu, 输入ubuntu的id和pwd
hostname 192.168.241.136
username chv210
连接后
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-24-generic x86_64)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
#:
说明secureCRT就可以登录上ubuntu12.04了
注意:
如果没有安装ssh,在secureCRT会提示
The remote system refused the connection.
要设置secureCRT支持中文,在options---》session options--》appearance---character encoding 选择UTF-8就可以
secureCRT的鼠标右键功能默认是粘贴的功能,用起来和windows系统的风格不一致,如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在options菜单----》global options------》terminal-------》mouse子菜单对 paste on right button的选项不要打勾就可以
8,安装SVN
sudo apt-get install subversion
9,安装jdk
在windows将jdk下载,通过samba传给ubuntu
cd /usr
sudo mkdir java
cd java
sudo cp ../../home/zhenwx/jdk-6u27-linux-x64.bin .
sudo chmod 777 jdk-6u27-linux-x64.bin
执行jdk的安装.
sudo ./jdk-6u27-linux-x64.bin
配置环境变量
cd /etc
sudo cp profiel profile-bak
sudo chmod 777 profile
vi etc/profile
在前面添加下面内容,按ESC按键,wq!
export JAVA_HOME=/usr/java/jdk1.6.0_27
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/bin
查看jdk是否安装成功
#source ./profile
#java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)
#
如果显示上面信息说明安装成功
10,安装编译Android需要的工具包,这个步骤是关键,必须安装,否则编译会报莫名其妙的错误!!!!!!!!!!!!!!!!
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev gcc-multilib g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
注意:
a.64位系统要安装gcc-multilib g++-multilib,32位系统不需要装.
b.Ubuntu 10.04需要添加额外的源才能安装Java5
deb http://cn.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://cn.archive.ubuntu.com/ubu..
如果没有安装 bison会编译报错
sudo sudo apt-get install bison
( /bin/bash: bison: command not found )
(/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: No such file or directory)
Ubuntu 中的 root 帐号默认是被禁用了的。在这种情况之下,如果你想要使用 root 的权限来干些事情,就需要 sudo 命令。如果你需要激活 Ubuntu 中的 root 帐号,在 Ubuntu 中激活 root 帐号的过程如下:
A. 在终端执行sudo passwd root指令后,系统将会提示你设置一个新的 root 帐号密码。
B. 点击 System -> Preferences -> Login Window 菜单,并切换到 Security 选项页,然后选中其下的“Allow local system administrator login”选项。
执行上述两步后,你便可以使用 root 帐号登录 Ubuntu 系统了。通过su命令就可以切换到root用户。
如果要再次禁用 root 帐号,那么可以执行sudo passwd -l root锁住 root 帐号
11,在菜单system--》preferences--》monitors选择显示的分辨率1280×800
12,UBUNTU12.04基本android2.3/android4.0开发环境安装成功了
第三步:
在自己工作目录下或某个文件夹下建立bin目录,我的是在/home/chv210/
确保你已经安装了git jdk python等.
1.创建bin目录,并加入到PATH
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2.下载repo到刚刚创建的bin目录,并设置权限为可执行。
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
3.创建Android源代码存放目录并进入到该目录
$ mkdir Android-4.0.4_r1
$ cd Android-4.0.4_r1
4.初始化Android4.0.4的Git库
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.4_r1
这里需要一个google帐号 输入你的用户名和 邮箱地址
5.最后执行开始同步下载
$ repo sync
最后,编译。
第一步:
在存放代码的那个文件夹下(Android-4.0.4_r1),执行:
$ source build/envsetup.sh
其中,build是源码目录中一个文件夹。
第二步:执行:
$ lunch full-eng
第三步:
$make -j4
等着编译完成就行了。
编译出现的问题:
<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]
<built-in>: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
后来发现了,原来是Ubuntu11.10里的gcc和g++版本太高了,于是执行下面的操作:
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo rm -rf /usr/bin/gcc /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++
上面两句ln命令可不执行,可以执行如下命令:(每次打开终端时都需输入,或放至脚本中)
export CC=gcc-4.4
export CXX=g++-4.4
这样就可以保证原本使用4.6版本编译的代码再次编译时不会影响到。
把默认的4.6版本换为了4.4,继续编译源码,又出现了另一个错误,大致提示为:
g++ selected multilib '32' not installed
安装相应的工具:sudo apt-get install g++-4.4-multilib,现在正在make -j4,还出现问题:
。。。。。
重新下载4.0.3的版本后编译full-eng版出现:
<built-in>:0:0: note: this is the location of the previous definition
host StaticLib: libOpenglCodecCommon (out/host/linux-x86/obj/STATIC_LIBRARIES/li
bOpenglCodecCommon_intermediates/libOpenglCodecCommon.a)
host SharedLib: libOpenglRender (out/host/linux-x86/obj/lib/libOpenglRender.so)
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] Error 1
解决方法:$
sudo
ln
-s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
*****************************************************************************************
host StaticLib: libGLcommon (out/host/linux-x86/obj/STATIC_LIBRARIES/libGLcommon
_intermediates/libGLcommon.a)
host SharedLib: libGLES_CM_translator (out/host/linux-x86/obj/lib/libGLES_CM_tra
nslator.so)
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libGLES_CM_translator.so] Error 1
解决方法: sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so
********************************************************************************
Target ram disk: out/target/product/smdkv210/ramdisk.img
target Strip: libutils (out/target/product/smdkv210/obj/lib/libutils.so)
mkimage -A arm -O linux -T ramdisk -C none -a 0x30A00000 -n "ramdisk" -d out/target/product/smdkv210/ramdisk.img out/target/product/smdkv210/ramdisk-uboot.img
/bin/bash: mkimage: command not found
make: *** [out/target/product/smdkv210/ramdisk.img] Error 127
make: *** Deleting file `out/target/product/smdkv210/ramdisk.img'
sudo apt-get install uboot-mkimage
**********************************************************************
collect2: ld terminated with signal 9 [Killed]
make: *** [out/host/linux-x86/obj/EXECUTABLES/dx-tests_intermediates/dx-tests] Killed
make: *** Deleting file `out/host/linux-x86/obj/EXECUTABLES/dx-tests_intermediates/dx-tests'
make: *** Waiting for unfinished jobs....
make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/noproguard.classes-with-local.dex]
Killed
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error
1
原因分析:主要是Linux 系统没加swap分区的原因,或是swap分区太小。
解决办法:解决的方法很简单,建个swap文件。
#sudo dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=512K
# sudo mkswap /opt/other/swapfile
# sudo swapon /opt/other/swapfile
# swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 1128440 39588 -1
/opt/other/swapfile file 524280 0 -2
需要注意:在出现这样的情况下,编译命令最好使用单线程的,即make,而不要使用make -j4(可能会出现上面的问题)。
编译sdk
$ source build/envsetup.sh
$ lunch sdk-eng
$ make sdk -j4
编译后的jar:
./out/host/linux-x86/sdk/android-sdk_eng.jiang_linux-x86/platforms/android-4.0.1/android.jar
./out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar