日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

Ubuntu12.04下在Android4.0.4源码下载及其编译过程(转载)

發布時間:2025/7/25 Ubuntu 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ubuntu12.04下在Android4.0.4源码下载及其编译过程(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、下載源碼

1、下載工具repo:https://android.googlesource.com/tools/repo/

在本地目錄建個bin的文件夾,進入bin文件夾;通過git下載:

[cpp] view plaincopy
  • git?clone?https://android.googlesource.com/tools/repo??

  • 下載完成后,進入repo文件夾,切換到穩定分支:

    [cpp] view plaincopy
  • git?checkout?-b?stable?origin/stable??

  • 將repo命令所在的目錄,即/home/yourname/bin/repo添加到環境變量中:

    [cpp] view plaincopy
  • export?PATH=$PATH:~/bin/repo??

  • 在本地目錄下新建目錄:android4.0.4,并進入該文件夾:

    [html] view plaincopy
  • cd?~;mkdir?android4.0.4;cd?android4.0.4;??
  • 在文件夾下執行下面命令來下載Android源碼:

    [html] view plaincopy
  • repo?init?-u?https://android.googlesource.com/platform/manifest??
  • 你也可以直接切換到你想要下的版本的分支,而不是“master”分支:

    [cpp] view plaincopy
  • repo?init?-u?https://android.googlesource.com/platform/manifest?-b?android-4.0.4_r2??
  • 關于到底是哪個分支,根據自己的情況而定,詳情可參照:https://android.googlesource.com/platform/manifest/

    如你想下載最新的Android4.1代碼,即可將分支名稱更換成:android-4.1.1_r4

    你也可以參照官網的下載方式來下載:http://source.android.com/source/downloading.html

    實驗證明,我總是在下載那個repo工具的時候,無法連接到相應的地址。

    下載是個漫長的過程,下載完成后的大小大概有14G,所以要提前準備好這么大的空間。下載完成后的目錄大概有這些:如圖

    二、編譯源碼

    如果你的電腦的環境經常做開發,那么很多環境應該已經搭建好了,如果沒有,可以參照官網:http://source.android.com/source/initializing.html

    這里要提醒的是:用apt-get或者ubuntu軟件中直接安裝的jdk,jre的時候,編譯Android是總是編譯不過,出現JDK版本不一致的情況;

    解決辦法如下:

    到oracle官網中下載jdk:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

    建議下載這個:jdk-6u35-linux-i586.bin

    下載完成后,運行得到一個jdk1.6.0_35文件夾,然后,將相應的JAVA環境加到系統環境中,簡單的可以這樣:

    [cpp] view plaincopy
  • vi?~/.bashrc??

  • 在.bashrc文件最后添加:

    [cpp] view plaincopy
  • JAVA_HOME=/home/clw712/tools/jdk1.6.0_35??
  • CLASSPATH=$JAVA_HOME/lib/??
  • ANDROID_PRODUCT_OUT=/home/clw712/bin/android/out/target/product/generic??
  • ANDROID=/home/clw712/bin/android??
  • ANDROID_SWT=/home/clw712/bin/android/out/host/linux-x86/framework??
  • PATH=$ANDROID/out/host/linux-x86/bin:$ANDROID/prebuilt/android-arm/kernel/:$JAVA_HOME/bin:$ANDROID_PRODUCT_OUT:$PATH??
  • ??
  • export?PATH?JAVA_HOME?CLASSPATH?ANDROID_PRODUCT_OUT?ANDROID_SWT??

  • 當然上述路徑還有后面編譯好了,用到的路徑,是用來運行emulator的。

    然后就可以參照官網上的步驟編譯:http://source.android.com/source/building.html

    如果你的ubuntu是最新的或者比較新的版本,那么在編譯過程中,會出現:

    [cpp] view plaincopy
  • <command-line>:0:0:?error:?"_FORTIFY_SOURCE"?redefined?[-Werror]??
  • <built-in>:0:0:?note:?this?is?the?location?of?the?previous?definition??
  • cc1plus:?all?warnings?being?treated?as?errors??

  • 這樣的錯誤,這個錯誤引起的原因在于gcc的版本太高了,gcc -v 可以看見是4.6.1的;

    解決方法為:安裝gcc4.4的

    [cpp] view plaincopy
  • sudo?apt-get?install?gcc-4.4??
  • sudo?apt-get?install?g++-4.4??

  • 安裝完成后需要將原gcc替換成gcc4.4的:

    進入/usr/bin,用ls -l gcc* 可以看到:

    [cpp] view plaincopy
  • lrwxrwxrwx?1?root?root??????7?2011-10-29?09:11?gcc?->?gcc-4.6??
  • -rwxr-xr-x?1?root?root?224544?2011-10-06?05:47?gcc-4.4??
  • -rwxr-xr-x?1?root?root?302104?2011-09-17?05:43?gcc-4.6??

  • 通過一下命令實現替換:

    [cpp] view plaincopy
  • sudo?mv?gcc?gcc.bak??
  • sudo?ln?-s?gcc-4.4?gcc??

  • 對于g++同理:

    [cpp] view plaincopy
  • lrwxrwxrwx?1?root?root??????7?2011-08-14?15:17?g++?->?g++-4.6??
  • -rwxr-xr-x?1?root?root?228640?2011-10-06?05:45?g++-4.4??
  • -rwxr-xr-x?1?root?root?306200?2011-09-17?05:39?g++-4.6??
  • ??
  • /usr/bin$?sudo?mv?g++?g++.bak??
  • /usr/bin$?sudo?ln?-s?g++-4.4?g++??
  • 現在可以通過gcc -v查看版本信息了,為gcc-4.4就正確了,可以編譯了


    三、補充編譯及運行模擬器

    編譯完成后,可以在源碼目錄的out/target/product/generic/目錄下看到編譯好的ramdisk.img、system.img和userdata.img了。

    正常情況下,可以配置好路徑環境變量后通過:

    [cpp] view plaincopy
  • cd?out/target/product/generic??
  • emulator?-system?system.img?-data?userdata.img?-ramdisk?ramdisk.img??
  • 我的Android4.0.4版本啟動的畫面如圖:


    這個命令來啟動模擬器;

    但是,我在開始時就遇到了一個錯誤:could find/prebuilt/android-arm/kernel/kernel-qemu該文件,我在網上查了很多資料都沒說到這個錯誤,回來在一篇博文中得到啟示,重新再編譯了一下SDK,重啟一下就好了。

    創建模擬器,還可以這樣:

    [cpp] view plaincopy
  • $?./android?create?avd?-t?2?-n?g1??

  • 其中 -t 指定TargetID (Android? SDK的ID為2,Android 1.0 SDK的ID為1),-n指定創建的Android虛擬設備名字。

    運行模擬器:

    $ ./emulator -avd g1? ?? ?? ?? ?? ?? ?? ?或者

    $ ./emulator -avd g1 -scale 0.8
    其中 -avd指定Android設備名,-scale指定縮放比例。
    按 Ctrl + F12 可以使模擬器屏幕旋轉90度,即橫屏、豎屏切換

    刪除模擬器:

    [cpp] view plaincopy
  • $?./android?delete?avd?-n?g1??

  • 編譯linux內核:

    直接編譯Android源碼時,并沒有編譯 linux kernel。如果只運行模擬器,不用編譯 linux kernel。
    從emulator獲取內核編譯參數的配置文件:
    啟動模擬器
    ?$ adb pull /proc/config.gz .
    ?解壓縮config.gz??$ gzip -d config.gz
    將config文件替換kernel文件夾下的.config文件。
    根據需要,修訂config與Makefile配置文件

    a)準備交叉編譯工具鏈

      android代碼樹中有一個prebuild項目,包含了我們編譯內核所需的交叉編譯工具。

    b)設定環境變量

      $ vi ~/.bashrc

    ?? 增加如下兩行:

      export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/ARM-eabi-4.4.0/bin

      export ARCH=arm

      保存后,同步變化:

      $ source ~/.bashrc

    c)獲得合適的內核源代碼

      $ cd ~/android

      獲得內核源代碼倉庫

      $ git clone git://android.git.kernel.org/kernel/common.git kernel

      $ cd kernel

      $ git branch

      顯示

      * android-2.6.27

      說明你現在在android-2.6.27這個分支上,也是kernel/common.git的默認主分支。

      顯示所有head分支:

      $ git branch -a

      顯示

      * android-2.6.27

      remotes/origin/HEAD -> origin/android-2.6.27

      remotes/origin/android-2.6.25

      remotes/origin/android-2.6.27

      remotes/origin/android-2.6.29

      remotes/origin/android-goldfish-2.6.27

      remotes/origin/android-goldfish-2.6.29

      我們選取最新的android-goldfish-2.6.29,其中goldfish是android的模擬器模擬的CPU。

      $ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

      $ git branch

      顯示

      android-2.6.27

      * android-goldfish-2.6.29

      我們已經工作在android-goldfish-2.6.29分支上了。

    d)設定交叉編譯參數

      打開kernel目錄下的Makefile文件,把CROSS_COMPILE指向剛才下載的prebuild中的arm-eabi編譯器

      CROSS_COMPILE ?= arm-eabi-

      把LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,$(call ld-option, -Wl$(comma)?build-id,))

      這一行注釋掉,并且添加一個空的LDFLAGS_BUILD_ID定義,如下:

      LDFLAGS_BUILD_ID =

    e)編譯內核映像

      $ cd ~/android/kernel

      $ make goldfish_defconfig

      $ make

    f)測試生成的內核映像

      $ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage

    ?

    編譯模塊:

    Android中的一個應用程序可以單獨編譯,編譯后需要重新生成system.img。
    在Android目錄下運行
    $ . build/envsetup.sh??或者
    $ source build/envsetup.sh ,然后就會多出幾個可用的命令:

    - croot:? ?Changes directory to the top of the tree.
    - m:? ?? ? Makes from the top of the tree.
    - mm:? ?? ?Builds all of the modules in the current directory.
    - mmm:? ???Builds all of the modules in the supplied directories.
    - cgrep:? ?Greps on all local C/C++ files.
    - jgrep:? ?Greps on all local Java files.
    - resgrep: Greps on all local res/*.xml files.
    - godir:? ?Go to the directory containing a file.
    - printconfig: 當前build的配置情況.
    可以使用 --help查看用法。
    如:在修改了某一個模塊以后,可以使用 $ mmm <目錄>??來重新編譯所有在<目錄>中的所有模塊,使用 $ mm??編譯當前目錄中的所有模塊。
    編完之后,即修改了Android系統以后,可以使用 $ make snod 重新生成system.img。

    編譯SDK:

    直接執行make是不包括make sdk的。make sdk用來生成SDK,這樣,我們就可以用與源碼同步的SDK來開發android了。

    a)修改/frameworks/base/include/utils/Asset.h

      ‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改為 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’

      原因是eclipse編譯工程需要大于1.3M的buffer;

    b)編譯ADT。

    c)執行make sdk。

    $ make sdk

      編譯很慢。編譯后生成的SDK存放在out/host/linux-x86/sdk/,此目錄下有android- sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目錄。android-sdk_eng.xxx_linux-x86就是 SDK目錄

      實際上,當用mmm命令編譯模塊時,一樣會把SDK的輸出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出來

      此后的應用開發,就在該SDK上進行,所以~/.bashrc的修改注釋掉,增加如下一行:

      export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

      注意要把xxx換成真實的路徑;

    d)關于環境變量、android工具的選擇

      目前的android工具有:

      A、我們從網上下載的SDK,如果你下載過的話( tools下有許多android工具,lib/images下有img映像)

      B、我們用make sdk編譯出來的SDK( tools下也有許多android工具,lib/images下有img映像)

      C、我們用make編譯出來的out目錄( tools下也有許多android工具,lib/images下有img映像)

      那么我們應該用那些工具和img呢?

      首先,我們一般不會用A選項的工具和img,因為一般來說它比較舊,也源碼不同步。其次,也不會用C選項的工具和img,因為這些工具和img 沒有經過 SDK的歸類處理,會有工具和配置找不到的情況;事實上,make sdk產生的很多工具和img,在make編譯出來out目錄的時候,已經編譯產生了,make sdk只是做了copy而已。

      f)創建Android Virtual Device

      編譯出來的SDK是沒有AVD(Android Virtual Device)的,我們可以通過android工具查看:

      $ android list

      創建AVD:

      $ android create avd -t 1 -n myavd

      可以android -help來查看上面命令選項的用法。創建中有一些選項,默認就行了

      再執行android list,可以看到AVD存放的位置

      以后每次運行emulator都要加-avd myavd或@myavd選項:

      $ emulator -avd myavd

    轉載于:https://www.cnblogs.com/microliang/p/3425579.html

    總結

    以上是生活随笔為你收集整理的Ubuntu12.04下在Android4.0.4源码下载及其编译过程(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。