Android4.2.2編譯筆記:從Ubuntu環境開始

環境安裝

: Ubuntu的apt-get不能直接下載安裝mingw32,需要修改sources.list

打開sources.list
輸入命令:sudo gedit /etc/apt/sources.list
在sources.list末尾添加以下語句(紅色),並保存退出。
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
再次更新apt
輸入命令:sudo apt-get update

: jdk6的安裝包

下載 jdk
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
現在的oracle要求下載前必須登陸
我的下載鏈接是http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin?AuthParam=1505035529_0f65ac80402d599c34529df11e4d531d
下載完成後,並不能雙擊運行這麼簡單(這便是Linux)
$ mkdir ~/bin
$ mv jdk-6u45-linux-x64.bin ~/bin/
$ cd ~/bin/
$ chmod +x jdk-6u45-linux-x64.bin
$ ./jdk-6u45-linux-x64.bin

編輯~/.bashrc 添加(運行$ gedit ~/.bashrc)
export PATH=~/bin:$PATH
export JAVA_HOME=~/bin/jdk1.6.0_45/
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
運行source ~/.bashrc 使之生效

: 可能遇到的bug

Android can only be built by versions 3.81 and 3.82
解決方法如下,下載3.8
ftp://ftp.gnu.org/gnu/make/make-3.81.tar.gz
make 3.8.1 的安裝步驟:
tar -zxvf make-3.81.tar.gz (解壓)
然後 cd 到 make3.8.1目錄下
執行 ./configure (配置)
make (編譯)
make install (安裝)
在make3.8.1 目錄下 會出現 make 這個編譯好的 命令
./make -version (GNU Make 3.81 )
cp make /usr/bin/make (把剛剛編譯好的make 把系統的覆蓋)
make -version(GNU Make 3.81)
在運行時可能會碰到aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.
需要運行之下命令
sudo apt-get install libswitch-perl
sudo cpan -f Switch

gcc 和g++版本過高
1、進入/usr/bin
ls -l gcc* 查看gcc當前連接版本
rm gcc 刪除gcc連接
同理
ls -l g++*
rm g++
2、降級到4.4.7版本
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib //64位
sudo apt-get install gcc-4.4-multilib
ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
ln -s /usr/bin/g++4.4 /usr/bin/g++

make: [out/host/linuxx86/obj/EXECUTABLES/emulator_intermediates/android/skin/window.o] Error 1
sudo apt-get install libx11-dev

: 官網要求的軟件

$ sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386

$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

把源碼導入虛擬機

創建共享文件夾以實現Window到Ubuntu文件的拷貝
在VirtualBox的共享文件夾中創建固定分配
如(WinShare 映射路徑爲 D:\WinShare)

設置好共享名後,進入Ubuntu系統,打開終端,先執行命令,在掛載點目錄添加“winShare”目錄,接着執行”sudo mount -t vboxsf WinShare /home/jian/winShare/”,就能完成共享文件夾的設置。

設置自動掛載,重啓虛擬機系統共享仍在。
可以在/etc/fstab中添加一項
WinShare /home/jian/winShare/ vboxsf rw,gid=110,uid=1100,auto 0 0

卸載掛載點命令:umount -f /home/jian/winShare/

編譯項目

進入源碼根目錄
編譯初始化:
在終端中執行:
source build/envsetup.sh
執行後輸出:
including device/asus/grouper/vendorsetup.sh
… …
including sdk/bash_completion/adb.bash
選擇編譯目標:
lunch full-eng
執行後會又以下信息提示:
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.2
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-2.6.32-45-generic-x86_64-with-Ubuntu-10.04-lucid
HOST_BUILD_TYPE=release
BUILD_ID=JOP40C
OUT_DIR=out :

編譯代碼:
在終端中執行:make -j4
-j4:表示用四個線程來編譯:
我用虛擬機,配置爲4g,交換空間爲2g,編譯了大約6個小時。

運行模擬器

在終端中執行:emulator
這裏寫圖片描述

在 ~/.bashrc
添加環境變量:
export ANDROID_PRODUCT_OUT=~/code/android-4.2/out/target/product/generic
export ANDROID_SWT=~/code/android-4.2/out/host/linux-x86/framework/

備註:
重啓系統後:
執行emulator,出現如下錯誤:

directory could not be found.
If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).
Otherwise, follow the instructions in -help-disk-images to start the emulator

解決:
source build/envsetup.sh
lunch sdk-eng
然後再執行
emulator
可以啓動模擬器

主機配置:Window/4G
虛擬機配置
F盤剩餘空間294G ->
起始時間是 19:22 ->

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章