ubuntu12.04(64位)下搭建android2.3/android4.0開發環境
本文介紹在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