VisualBox ubuntu14.04 64位 android4.4.4源碼編譯總結


轉載請保留出處:http://www.cnblogs.com/wi100sh/p/4337907.html

 

折騰了好幾天,今天終於編譯通過,用了4個多小時,太不容易了。如下圖所示:

軟件環境

虛擬機:VisualBox

操作系統:Ubuntu14.04 64位

android源碼:android-4.4.4_r1

 

在這過程中遇到各種問題,通過apt-get install 安裝相應的庫可以解決一部分。編譯2-3個小時的時候遇到一個棘手的問題,

“make: *** [out/target/product/mako/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] 錯誤 1”

google和baidu都沒有找到解決方法。查看網友成功編譯android4.4源碼的文章,里面的提到的步驟自己都操作一下,終於可以編譯成功了,下面列出了自己操作的步驟:

1. 如果使用虛擬機的話,特別提醒一下,一定要將虛擬機的大小開到100G以上

2. 下載並安裝jdk6
  注意,版本一定要是jdk6,其他版本都會有問題。
  網上流傳的方法大都是apt-get install來安裝jdk,實際操作證明這樣是不行的,下面給出個下載jdk6的地址
  https://jdk6.java.net/download.html  在這里根據自己機器配置情況選擇自解壓文件(self-extracting)就好了
  上面下載得到jdk-6u38-ea-bin-b04-linux-i586-31_oct_2012.bin文件,改變屬性使其擁有可執行權限。
  ./jdk-6u38-ea-bin-b04-linux-i586-31_oct_2012.bin即可安裝,該jdk是32位的。

3. vim ~/.bashrc 在最后添加

PATH=$PATH:/usr/local/java/jdk1.6.0_38/bin
CLASSPATH=.:/usr/local/java/jdk1.6.0_38/lib
JAVA_HOME=/usr/local/java/jdk1.6.0_38

然后執行source ~/.bashrc 使配置生效

4. 設置Ubuntu下默認的jdk
  因為ubnuntu中有默認安裝的openjdk,但我們編譯Android源碼是需要jdk6的,所以需要設置默認成jdk6
   sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.6.0_38/bin/java 300
   sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.6.0_38/bin/javac 300
   update-alternatives --config java

5. 測試jdk環境變量是否正確配置

VBox:~$ java -version
java version "1.6.0_38-ea"
Java(TM) SE Runtime Environment (build 1.6.0_38-ea-b04)
Java HotSpot(TM) Server VM (build 20.13-b02, mixed mode)

若出現上述信息,則說明jdk環境變量已經配置成功

6. 預先要安裝的其他軟件
  說明下,為保證編譯過程中不老是缺少某些軟件而中斷,所以一定要做好准備工作,不打任何一場無准備的仗。
  網上很多前輩都已經給出來了不少要提前安裝好的軟件,下面把它們集中整理出來。

sudo apt-get install build-essential make gcc g++ libc6-dev patch \
texinfo libncurses-dev flex bison git-core gperf libsdl-dev libesd0-dev \
libwxgtk2.6-dev build-essential zip curl ncurses-dev zlib1g-dev valgrind

上面這個命令,我沒有執行,安裝了下面提到的幾個包。

  sudo apt-get install libgtk2.0-0:i386
  sudo apt-get install libpangox-1.0-0:i386
  sudo apt-get install libpangoxft-1.0-0:i386
  sudo apt-get install libidn11:i386
  sudo apt-get install gstreamer0.10-pulseaudio:i386
  sudo apt-get install gstreamer0.10-plugins-base:i386
  sudo apt-get install gstreamer0.10-plugins-good:i386
  sudo apt-get install gstreamer0.10-ffmpeg:i386(該軟件我沒有安裝成功,最后也沒出什么問題)
  
  再加個說明:上面的軟件中最后幾個以i386是因為一個錯誤(具體什么錯誤現在實在記不起來了),錯誤原因就是需要安裝ia32-libs的軟件包64位Linux(Ubuntu)上編譯Android源碼時還需要一個32位Linux的包,所以需要這個ia32-libs的支持包,但這個ia32-libs的軟件包在網上根本沒有找到,也沒發現實際可用的解決方案,但從Ubuntu官網上來看,這個ia32-libs其實就是若干軟件包的合集,所以下載安裝其中的那么幾個軟件包就可以達到我們的目的。

7. 為了提高編譯的效率,我們最好先設置一下編譯器的高速緩存從而加快編譯速度,使用下面的命令

prebuilts/misc/linux-x86/ccache/ccache -M 50G

注意事項:

① 前提是已經在 .bashrc文件中添加:export USE_CCACHE = 1

② ccache是一個可執行文件

③ -M 50G 兩個參數表示設置50G大小的空間作為緩存,這個數值可以根據自己時間硬盤空間大小繼續調整

ccache是一個編譯器ccache用於C和C++。可以讓構建更加快速。

可以使用如下操作來查看使用的ccache大小:

$watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts來代替prebuilts/misc

8. 正式編譯Android源碼
  做了那么多的准備工作,現在終於可以做正事了。根據Android官網的說法,編譯Android源碼執行下面三個命令即可
  ① source build/envsetup.sh
  ② lunch 此時要選擇一個編譯平台
    運行 lunch 命令選擇好編譯目標后,會出現如下提示信息,告訴我們編譯的源碼一些相關信息


  ③ make -jn
    這里的n注意取值,網上一般說法是CPU核數的兩倍,還有一說是CPU核數加1。到底哪個更准確我也沒有驗證。
    但要值得提醒的是,雖然n用一個大的值會使編譯速度加快,但如果n取值過大,編譯是會報錯的。
    如果實在不確定n應該用什么值,那就直接用make命令吧。

編譯完成之后在源碼目錄的out/target/product/generic/生成對應固件等文件,如下圖所示,我們可以運行模擬器或者刷機。

out/target/generic目錄包含了最終要使用的目標文件。
out/target/generic/system目錄是system.img解壓后的目錄。android系統中大都數程序都在system目錄中,包括apk應用程序(out/target/generic/system/app)。

out/target/generic/root目錄是ramdisk.img解壓后的目錄。

out/target/generic/data目錄是userdata.img解壓后的目錄。

 9. 配置環境,准備emulator

編譯好android之后,emulator所在的目錄:~/android/out/host/linux-x86/bin

ramdisk.img,system.img和userdata.img所在的目錄:~/android/out/target/product /generic

kernel-qemu-armv7所在的目錄:~/android-4.4.4_r1/prebuilts/qemu-kernel/arm

(1)編譯成功后運行emulator提示No command 'emulator'

解決方法:

$ vi ~/.bashrc

在文件的最后添加如下指令

export ANDROID_PRODUCT_OUT=~/android-4.4.4_r1/out/target/product/generic //android-4.4.4_r1改成你自己的文件路徑

ANDROID_PRODUCT_OUT_BIN=~/android-4.4.4_r1/out/host/linux-x86/bin //android-4.4.4_r1改成你自己的文件路徑

export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};

$ source ~/.bashrc 使配置生效

(2)接下來出現如下錯誤

emulator: ERROR: You did not specify a virtual device name, and the system
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

解決方法:

 vi ~/.bashrc

在文件的最后添加如下指令

export ANDROID_BUILD_TOP=~/android-4.4.4_r1

$ source ~/.bashrc 使配置生效

(3)再次執行下面的命令,運行emulator成功。

VBox:~/android-4.4.4_r1/out/target/product/generic$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

轉載請保留出處:http://www.cnblogs.com/wi100sh/p/4337907.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM