當前位置:首頁 » 編程軟體 » repo編譯

repo編譯

發布時間: 2022-08-18 04:23:17

㈠ 自己可以編譯安卓源碼

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」

其中[email protected]為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:


這里寫圖片描述

執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

    結束吧

    到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    ㈡ 如何編譯AMBER14

    一、編譯環境與要解決的問題
    操作系統:RHEL6
    GPU: NVIDIA Tesla K40c
    AMBER: 14
    硬體:HP Z820
    編譯出現的問題:AMBER14不支持使用CUDA7.0, 僅支持6.5或更低版本;RHEL6操作系統安裝CUDA6.5不識別Tesla K40c, 需要CUDA7.0。
    二、解決方式
    安裝CUDA7.0做為驅動,安裝CUDA6.5作為runtime。
    三、具體安裝方式
    1, 安裝第三方資源庫:epel-release-6-8.noarch.rpm
    wget http://mirrors.opencas.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm -i http://mirrors.opencas.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm
    這個資源庫注釋有問題,需要進行修改
    vim /etc/yum.repos.d/epel.repo
    修改下面兩行
    #baseurl=xxxx
    mirrorlist=https://####
    為:
    baseurl=xxxx
    #mirrorlist=xxxx
    *如果不修改,有可能yum install cuda回提示epel meta link錯誤
    2,安裝CUDA 7
    CUDA7作為TESLA K40c的驅動
    1)從nvidia網站上下載,CUDA7的Repository文件,rpm安裝
    rpm –install cuda-repo-rhel6-7-0-28.x86_64.rpm
    2)清除過期meta-data
    yum clean expire-cache
    3)安裝cuda 7
    yum install cuda
    註:如果之前沒有修改第三方資源庫epel的話,會出現epel的問題而沒有辦法繼續安裝
    成功後,CUDA的目錄為:
    /usr/local/cuda
    編譯AMBER,需要聲明CUDA_HOME變數:
    export CUDA_HOME=/usr/local/cuda
    4)嘗試安裝AMBER14
    安裝amber
    ./configure -cuda gnu
    make install
    *出現錯誤:cuda版本太高,只能用6.5以下的
    Error: Unsupported CUDA version 7.0 detected.
    AMBER requires CUDA version == 5.0 .or. 5.5 .or. 6.0 .or. 6.5
    Configure failed e to the errors above!
    3.安裝CUDA6.5,提供Runtime
    1)刪除/usr/local/cuda目錄
    rm -fr /usr/local/cuda
    這個目錄將被CUDA6.5的內容覆蓋
    2)卸載cuda-repo-rhel6-7-0-28.x86_64.rpm
    rpm -e cuda-repo-rhel6-7xxxx #xxxx代表具體的版本號
    3)安裝 CUDA 6.5
    按照上面步驟2. 安裝CUDA 7的流程,從下載 cuda-repo-rhel6-6.5-14.x86_64.rpm開始,安裝CUDA6.5
    4, 驅動測試
    CUDA自帶有examples,編譯進行測試。比如:
    設備驗證
    cp /usr/local/cuda/samples .
    cd samples
    cd 1_Utilities
    make
    ./deviceQuery
    [amber@amtech deviceQuery]$ ./deviceQuery
    ./deviceQuery Starting…
    ——————————————————————————————–
    CUDA Device Query (Runtime API) version (CUDART static linking)
    Detected 2 CUDA Capable device(s)
    Device 0: 「Tesla K40c」
    CUDA Driver Version / Runtime Version 7.0 / 6.5
    CUDA Capability Major/Minor version number: 3.5
    Total amount of global memory: 11520 MBytes (12079136768 bytes)
    (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores
    GPU Clock rate: 745 MHz (0.75 GHz)
    Memory Clock rate: 3004 Mhz
    Memory Bus Width: 384-bit
    L2 Cache Size: 1572864 bytes
    Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
    Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
    Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
    Total amount of constant memory: 65536 bytes
    Total amount of shared memory per block: 49152 bytes
    Total number of registers available per block: 65536
    Warp size: 32
    Maximum number of threads per multiprocessor: 2048
    Maximum number of threads per block: 1024
    Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
    Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
    Maximum memory pitch: 2147483647 bytes
    Texture alignment: 512 bytes
    Concurrent and kernel execution: Yes with 2 engine(s)
    Run time limit on kernels: No
    Integrated GPU sharing Host Memory: No
    Support host page-locked memory mapping: Yes
    Alignment requirement for Surfaces: Yes
    Device has ECC support: Enabled
    Device supports Unified Addressing (UVA): Yes
    Device PCI Bus ID / PCI location ID: 6 / 0
    Compute Mode:
    < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
    Device 1: 「Tesla K40c」
    CUDA Driver Version / Runtime Version 7.0 / 6.5
    CUDA Capability Major/Minor version number: 3.5
    Total amount of global memory: 11520 MBytes (12079136768 bytes)
    (15) Multiprocessors, (192) CUDA Cores/MP: 2880 CUDA Cores
    GPU Clock rate: 745 MHz (0.75 GHz)
    Memory Clock rate: 3004 Mhz
    Memory Bus Width: 384-bit
    L2 Cache Size: 1572864 bytes
    Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
    Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
    Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
    Total amount of constant memory: 65536 bytes
    Total amount of shared memory per block: 49152 bytes
    Total number of registers available per block: 65536
    Warp size: 32
    Maximum number of threads per multiprocessor: 2048
    Maximum number of threads per block: 1024
    Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
    Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
    Maximum memory pitch: 2147483647 bytes
    Texture alignment: 512 bytes
    Concurrent and kernel execution: Yes with 2 engine(s)
    Run time limit on kernels: No
    Integrated GPU sharing Host Memory: No
    Support host page-locked memory mapping: Yes
    Alignment requirement for Surfaces: Yes
    Device has ECC support: Enabled
    Device supports Unified Addressing (UVA): Yes
    Device PCI Bus ID / PCI location ID: 66 / 0
    Compute Mode:
    < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
    > Peer access from Tesla K40c (GPU0) -> Tesla K40c (GPU1) : No
    > Peer access from Tesla K40c (GPU1) -> Tesla K40c (GPU0) : No
    deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 7.0, CUDA Runtime Version = 6.5, NumDevs = 2, Device0 = Tesla K40c, Device1 = Tesla K40c
    Result = PASS
    這個機器有兩個K40c GPU
    5, amber14的GPU版編譯
    1,單GPU版編譯
    cd $AMBERHOME
    make clean
    ./configure -cuda gnu
    make install
    測試
    make test.cud
    2,多GPU並行版編譯
    cd $AMBERHOME
    make clean
    ./configure -cuda -mpi gnu
    make install
    測試:
    export DO_PARALLEL=』mpirun -np 2′ # for bash/sh
    setenv DO_PARALLEL 『mpirun -np 2』 # for csh/tcsh
    ./test_amber_cuda_parallel.sh

    ㈢ 交叉工具鏈編譯過程

    android源碼有4G,怎麼發。我從官網上下載要8個小時。
    編譯Android系統源碼需要以下工具:git工具,repo工具,java sdk,主機編譯工具等
    我的實驗環境是ubuntu 10.10,步驟如下
    1.打開終端輸入
    alex@alex-Linux:~$ sudo -i
    root@alex-Linux:~$ apt-get install git-core flex bison gperf libesd0-dev zip
    root@alex-Linux:~$ apt-get install libwxgtk2.6-dev zlib1g-dev build-essential libstdc++5
    root@alex-Linux:~$ apt-get install tofrodos x-dev libx11-dev libncurses5-dev
    root@alex-Linux:~$ apt-get install sun-java5-jdk
    如果在上述過程中提示無法找到源,請參閱在源配置中添加ubuntu9.04源
    2.編譯Android系統源碼官方推薦使用Java5.如果本機安裝了Java6,應將其配置成java5.需要卸載java6
    alex@alex-Linux:~$ apt-get remove sun-java6-jdk
    3.配置java環境
    root@alex-Linux:/etc/apt# update-alternatives --config java
    選擇 路徑 優先順序 狀態
    ------------------------------------------------------------
    * 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自動模式
    1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 手動模式
    2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手動模式
    3 /usr/lib/jvm/java-6-sun/jre/bin/java 63 手動模式
    選擇1
    4.Android系統源碼在編譯過程中需要編譯主機工具,所以還需要主機打gcc工具鏈,而對於編譯目標機文件,ANdroid在prebuilt目錄中集成了gcc交叉編譯工具鏈。repo是對調用git打封裝打工具,安裝repo
    alex@alex-Linux:~$ sudo -i
    root@alex-Linux:~# cd /bin
    root@alex-Linux:/bin# curl > ~/bin/repo
    如果提示curl未安裝,請輸入sudo apt-get install curl
    設置bin/repo的可執行許可權alex@alex-Linux:~/bin$ chmod a+x ~/bin/repo
    5.下載Android源碼 代碼庫打路徑為android.git.kernel.org 可以通過網頁瀏覽代碼庫的內容。在用戶主目錄新建androidsource進入該目錄
    alex@alex-Linux:~/androidsource$ repo init-u git://android.git.kernel.org/platform/manifast.git
    當出現Your Name [xxx]:
    Your Email[[email protected]]:時輸入相應用戶名和Email,經過repo init後,執行repo sync 下載Android系統源文件
    時間很長,請耐心等待。

    ㈣ 如何開發編譯部署調用智能合約

    在Solidity中,一個合約由一組代碼(合約的函數)和數據(合約的狀態)組成。合約位於以太坊區塊鏈上的一個特殊地址。uint storedData; 這行代碼聲明了一個狀態變數,變數名為storedData,類型為 uint (256bits無符號整數)。你可以認為它就像資料庫裡面的一個存儲單元,跟管理資料庫一樣,可以通過調用函數查詢和修改它。在以太坊中,通常只有合約 的擁有者才能這樣做。在這個例子中,函數 set 和 get 分別用於修改和查詢變數的值。

    跟很多其他語言一樣,訪問狀態變數時,不需要在前面增加 this. 這樣的前綴。

    這個合約還無法做很多事情(受限於以太坊的基礎設施),僅僅是允許任何人儲存一個數字。而且世界上任何一個人都可以來存取這個數字,缺少一個(可靠 的)方式來保護你發布的數字。任何人都可以調用set方法設置一個不同的數字覆蓋你發布的數字。但是你的數字將會留存在區塊鏈的歷史上。稍後我們會學習如 何增加一個存取限制,使得只有你才能修改這個數字。

    代幣的例子

    接下來的合約將實現一個形式最簡單的加密貨幣。空中取幣不再是一個魔術,當然只有創建合約的人才能做這件事情(想用其他貨幣發行模式也很簡單,只是實現細節上的差異)。而且任何人都可以發送貨幣給其他人,不需要注冊用戶名和密碼,只要有一對以太坊的公私鑰即可。

    注意
    對於在線solidity環境來說,這不是一個好的例子。如果你使用在線solidity環境 來嘗試這個例子。調用函數時,將無法改變from的地址。所以你只能扮演鑄幣者的角色,可以鑄造貨幣並發送給其他人,而無法扮演其他人的角色。這點在線 solidity環境將來會做改進。

    ㈤ 如何自己編譯android系統並製作刷機包

    android系統製作刷機包方法:

    【一】:下載安裝最新版ROM助手(市場中有很多類似的製作工具,關鍵要求操作簡單,功能強大),安裝程序非常簡單,只需在一隻蘑菇首頁內直接下載,並解壓到自己的電腦安裝即可。

    【二】:如果已經下載了與機型匹配的ROM刷機包,那麼現在可以直接打開ROM助手了,接下來繪制專屬個性的完美刷機包就從這里開始吧。

    【三】:打開軟體後,它會自動升級到最新版本,另外打開主界面後,會直觀簡明的顯示出它的所有功能,例如:性能優化,系統精簡,預裝APK,簽名打包等等。提醒大家,不要貪心哦,要根據自己的需求點擊需要操作的功能,如系統精簡,然後進入操作界面,所有功能全部修改一遍也無妨,反正都是一鍵操作,省時省力。

    ㈥ 如何在32位ubuntu11.10 下編譯android 4.0.1源碼和goldfish內核

    一準備工作

    1安裝javasdk6
    (1)從jdk官方網站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下載jdk-6u29-linux-i586.bin文件。
    (2)執行jdk安裝文件

    [html] view plain
    $chmod a+x jdk-6u29-linux-i586.bin
    $jdk-6u29-linux-i586.bin

    (3)配置jdk環境變數

    [html] view plain
    $sudo vim /etc/profile
    [html] view plain
    #JAVAEVIRENMENT
    exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
    exportJRE_HOME=$JAVA_HOME/jre
    exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

    保存後退出編輯,並重啟系統。
    2安裝依賴包

    [html] view plain
    $sudo apt-get install git-core gnupg flex bison gperf build-essential\
    zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
    x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
    libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
    libxml2-utils

    3用repo工具下載源碼
    (1)初始化repo

    [html] view plain
    $cd ~
    $mkdir bin
    $curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
    $chmod a+x ~/bin/repo
    $exportPATH=$PATH:~/bin(導出環境變數)

    (2)下載android最新源碼

    [html] view plain
    $mkdir android
    $cd android
    $ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
    ...(輸入用戶名和郵箱名)
    $repo sync -j5
    ...(此處用5個線程開始下載源碼,下載過程及其漫長,需要耐心等待)

    二 編譯源碼
    1開始編譯

    [html] view plain
    $source build/envsetup.sh
    includingdevice/samsung/maguro/vendorsetup.sh

    includingdevice/samsung/tuna/vendorsetup.sh

    includingdevice/ti/panda/vendorsetup.sh

    includingsdk/bash_completion/adb.bash

    $make-j4(此處用4個線程編譯)

    編譯完成後,會看到類似的輸出:

    [html] view plain
    Targetramdisk:out/target/proct/generic/ramdisk.img
    Targetuserdatafsimage:out/target/proct/generic/userdata.img
    Installedfilelist:out/target/proct/generic/installed-files.txt

    2編譯遇到的問題
    編譯錯誤:

    [html] view plain
    <命令行>:0:0:錯誤:「_FORTIFY_SOURCE」重定義[-Werror]

    <built-in>:0:0:附註: 這是先前定義的位置

    cc1plus:所有的警告都被當作是錯誤

    make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]錯誤 1

    原因:
    因機器上的gcc版本過高,需替換成4.4.6重新進行編譯。
    解決方法:
    1)安裝4.4版本的gcc和g++

    [html] view plain
    $ sudo apt-get install gcc-4.4
    $ sudo apt-get install g++-4.4

    2)設置gcc版本,使gcc鏈接到gcc-4.4

    [html] view plain
    $ ls -l /usr/bin/gcc*

    lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6

    -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4

    -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6

    $ cd /usr/bin
    $ sudo mv gcc gcc.bak
    $ sudo ln -s gcc-4.4 gcc

    3)設置g++版本,使g++鏈接到g++-4.4

    [html] view plain
    $ sudo mv g++ g++.bak
    $ sudo ln -s g++-4.4 g++

    4)設置完畢後,重新進行編譯即可

    3從模擬器啟動編譯後的鏡像文件
    1)設置環境變數:

    [html] view plain
    export PATH=~/android/out/host/linux-x86/bin:$PATH

    export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic

    其中linux-x86/bin存放模擬器emulator工具,proct/generic存在編譯後的鏡像文件。

    2)啟動模擬器

    [html] view plain
    $emulator

    emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)

    啟動後的截圖:

    三 編譯androidgoldfish內核
    1)進入android4.0.1源碼目錄,下載goldfish內核源碼

    [html] view plain
    $ mkdir kernel
    $ cd kernel
    $ git clone http://android.googlesource.com/kernel/goldfish.git
    $ cd goldfish
    $ git branch -a
    * (no branch)

    master

    remotes/origin/HEAD -> origin/master

    remotes/origin/android-goldfish-2.6.29

    remotes/origin/master

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

    2)修改Makefile

    [html] view plain
    goldfish$ gedit Makefile

    修改

    [html] view plain
    ARCH ?=$(SUBARCH)
    CROSS_COMPILE ?=



    [html] view plain
    ARCH ?=arm
    CROSS_COMPILE ?=arm-eabi-

    3)導出交叉編譯器目錄為環境變數
    $ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

    4)編譯內核

    [html] view plain
    goldfish$ make goldfish_armv7_defconfig

    goldfish$ make

    編譯完成後,可看到類似如下的輸出:

    [html] view plain
    OBJCOPY arch/arm/boot/zImage
    Kernel: arch/arm/boot/zImage is ready

    5)從模擬器中啟動內核鏡像

    [html] view plain
    $emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &

    啟動模擬器後,可從Settings->System->AboutPhone中查看內核版本信息。

    ㈦ 如何編譯android sdk

    如果沒有真正開發板,又想深入到android
    framework里,或kernel里的話,就只能用android
    的emulator了。
    但是我們下載的android
    SDK沒有源代碼,我們沒辦法跟蹤修改framework和kernel里的東西。
    所以有了想嘗試自己從頭生成SDK的想法。
    1.
    首先下載編譯android所有source
    code.
    具體步驟這里不再贅述,參考ht
    tp:/
    /source.and
    roid.c
    om/download
    cd
    mydroid
    repo
    init
    -u
    git://android.git.kernel.org/platform/manifest.git
    repo
    sync
    一點小提示:
    有時候google的android伺服器老是斷,總不能讓我們守在電腦旁邊一直手工重新repo
    sync吧,這可是需要N個小時才能下載完的啊。
    我們就寫個小腳本讓電腦自動repo
    sync,直到下載成功為止:
    #!/bin/sh
    count=0
    ret=1
    while
    [
    $ret
    -ne
    0
    ]
    do
    repo
    sync
    ret=$?
    count=$((
    $count
    +
    1))
    echo
    "try
    $count,
    ret:
    $ret"
    done
    echo
    "try
    $count,
    ret:
    $ret"
    把上面的內容復制到一個文件里tryrepo.sh
    然後修改tryrepo.sh的屬性,開始自動工作吧。第二點早上應該就大功告成了
    chmod
    a+x
    tryrepo.sh
    ./tryrepo.sh
    2.
    編譯android,
    生成SDK
    make
    sdk
    漫長的等待之後,SDK生成了,在目錄:mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\
    在linux下面可以直接運行mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\tools\android
    就可以看到熟悉的android
    emulator啟動界面。
    如果想在windows
    XP下使用這個SDK和emulator,
    最簡單的方法是:
    (1)自己下載一個最新的windows版本的android
    2.0
    SDK。
    (2)把mydroid\out\host\linux-x86\sdk\android-sdk_eng.yanbin_linux-x86\platforms\下的東西復制到windows版SDK的platforms下。
    (3)
    然後把platforms下android-2.0下tools目錄下的幾個.exe文件復制到自己編譯的SDK目錄下的tools目錄下。

    ㈧ 編譯android 源碼需要sdk環境嗎

    下面是android學習手冊,可以查看編譯源碼,360手機助手中下載,

    編譯環境:ubuntu9.10,widnows平台目前不被支持。

    1)安裝必要的軟體環境

    $ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

    官方推薦的就是上面這些,如果在編譯過程中發現某些命令找不到,就apt-get它。可能需要的包還有:

    $ sudo apt-get install make
    $ sudo apt-get install gcc
    $ sudo apt-get install g++
    $ sudo apt-get install libc6-dev

    $ sudo apt-get install patch
    $ sudo apt-get install texinfo

    $ sudo apt-get install zlib1g-dev
    $ sudo apt-get install valgrind
    $ sudo apt-get install python2.5(或者更高版本)

    需要注意的是,官方文檔說如果用sun-java6-jdk可出問題,得要用sun-java5- jdk。經測試發現,如果僅僅make(make不包括make sdk),用sun-java6-jdk是沒有問題的。而make sdk,就會有問題,嚴格來說是在make doc出問題,它需要的javadoc版本為1.5。

    因此,我們安裝完sun-java6-jdk後最好再安裝sun-java5-jdk,或者只安裝sun-java5-jdk。這里sun-java6-jdk和sun-java5-jdk都安裝,並只修改javadoc.1.gz和javadoc。因為只有這兩個是make sdk用到的。這樣的話,除了javadoc工具是用1.5版本,其它均用1.6版本:

    $ sudo apt-get install sun-java6-jdk

    修改javadoc的link:

    $ cd /etc/alternatives
    $ sudo rm javadoc.1.gz
    $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
    $ sudo rm javadoc
    $ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

    2)設置環境變數

    $ emacs ~/.bashrc

    在.bashrc中新增或整合PATH變數,如下:

    #java 程序開發/運行的一些環境變數

    JAVA_HOME=/usr/lib/jvm/java-6-sun
    JRE_HOME=${JAVA_HOME}/jre
    export ANDROID_JAVA_HOME=$JAVA_HOME
    export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    export JAVA_HOME;
    export JRE_HOME;
    export CLASSPATH;
    HOME_BIN=~/bin/
    export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

    保存後,同步更新:

    source ~/.bashrc

    3)安裝repo(用來更新android源碼)

    創建~/bin目錄,用來存放repo程序,如下:

    $ cd ~
    $ mkdir bin

    並加到環境變數PATH中,在第2步中已經加入。

    下載repo腳本並使其可執行:

    $ curlhttp://android.git.kernel.org/repo>~/bin/repo
    $ chmod a+x ~/bin/repo

    4)初始化repo

    repo是android對git的一個封裝,簡化了一些git的操作。

    創建工程目錄:

    $ mkdir android
    $ cd android

    repo初始化:

    $ repo init -u git://android.git.kernel.org/platform/manifest.git

    在此過程中需要輸入名字和email地址。初始化成功後,會顯示:

    repo initialized in /android

    在~/android下會有一個.repo的隱藏目錄。

    5)同步源代碼

    $ repo sync

    這一步要很久很久。

    6)編譯android源碼,並得到~/android/out目錄

    $ cd ~/andoird
    $ make

    這一過程很久。

    7)在模擬器上運行編譯好的android

    編譯好android之後,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img則在~/android/out/target/proct/generic下。

    $ cd ~/android/out/host/linux-x86/bin

    增加環境變數

    $ emacs ~/.bashrc

    在.bashrc中新增環境變數,如下

    #java 程序開發/運行的一些環境變數

    export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
    ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
    export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

    最後,同步這些變化:

    $ source ~/.bashrc
    $ cd ~/android/out/target/proct/generic
    $ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

    最後進入android桌面,就說明成功了。

    8)編譯模塊

    android中的一個應用程序可以單獨編譯,編譯後要重新生成system.img。

    在源碼目錄下執行

    $ . 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 moles in the current directory.
    - mmm: Builds all of the moles 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.

    可以加—help查看用法。

    我們可以使用mmm來編譯指定目錄的模塊,如編譯聯系人:

    $ mmm packages/apps/Contacts/

    編完之後生成兩個文件:

    out/target/proct/generic/data/app/ContactsTests.apk
    out/target/proct/generic/system/app/Contacts.apk

    可以使用

    $ make snod

    重新生成system.img,再運行模擬器。

    9)編譯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

    由於本人不使用eclipse,所以沒有進行這步;

    c)執行make sdk

    注意,這里需要的javadoc版本為1.5,所以你需要在步驟1中同時安裝sun-java5-jdk

    $ 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上進行,所以把7)對於~/.bashrc的修改注釋掉,增加如下一行:

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

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

    d)關於環境變數、android工具的選擇

    目前的android工具有:

    A、我們從網上下載的Android 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只是做了而已。

    e)安裝、配置ADT
    略過;

    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

    10)編譯linux內核映像

    a)准備交叉編譯工具鏈

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

    b)設定環境變數

    $ emacs ~/.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指向剛才下載的prebuilt中的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

    ㈨ 如何針對特定機型,編譯cwm recovery

    你必須使用32位或64位Ubuntu系統,關於如何建立編譯環境和同步源碼的指導,請自己查找有關指導的文章。
    1,
    安裝所需要的包
    2,
    建立編譯的環境,並同步CWM所需的源碼,CyanogenMod源碼中附帶CWM源碼
    CWM
    5
    -
    Gingerbread
    CWM
    6
    -
    Jellybean
    3,
    下面我們進入真正的編譯階段,確保你已經使用「repo
    sync
    」命令同步了最新的源碼
    進入源碼的目錄
    放出以下命令:
    make
    -j4
    otatools
    3.5,
    如果你的機型不被CM10官方支持,請執行這一步
    在你的手機終端上執行以下命令,
    mp_image
    boot
    /sdcard/boot.img
    這將boot鏡像導出到你手機的sdcard,復制該鏡像至你的home目錄下
    為一款新設備編譯android源碼,需要建立相應的配置文件和makefile文件,這通常比較麻煩,如果僅僅編譯recovery鏡像,會容易的多。在android源碼根目錄下(假設已運行envsetup.sh),運行以下命令(使用適當的名稱取代命令中的名稱)
    build/tools/device/mkvendor.sh
    device_manufacturer_name
    device_name
    /your/path/to/the/boot.img
    例如,你擁有Samsung
    Galaxy
    Ace這款設備,你應該使用以下這條命令
    build/tools/device/mkvendor.sh
    Samsung
    cooper
    ~/boot.img
    Please
    note
    that
    Cooper
    is
    the
    device
    name.
    Only
    use
    "~/boot.img"
    if
    you
    have
    the
    boot
    image
    in
    your
    home
    directory.
    Or
    else
    please
    specify
    the
    correct
    path.
    如果所有都工作正常,你將看到"Done!"這樣的確認信息。mkvendor.sh腳本也將在你的android源碼樹中創建以下目錄:
    manufacturer_name/device_name
    4,
    現在你已經擁有相關的配置文件
    在源碼目錄下,在terminal終端下鍵入以下命令
    .
    build/envsetup.sh
    這一步將為你建立編譯環境
    現在使用這條命令
    lunch
    full_device_name-eng
    這將為你的設備建立起build
    system。用文件管理器或IDE打開目錄,你應該擁有以下文件:
    AndroidBoard.mk,
    AndroidProcts.mk,
    BoardConfig.mk,
    device_.mk,
    kernel,
    system.prop,
    recovery.fstab,

    vendorsetup.sh
    對你感興趣的應該是recovery.fstab和kernel這兩個文件,kernel這個文件是你之前從boot.img文件中提取出的。recovery.fstab將適用於大部分擁有
    mtd,
    emmc,或者其他分區的設備。如果沒有,recovery.fstab將需要優化以支持載入這些點。例如
    /sdcard被載入至/dev/block/mmcblk1p1,
    你需要將下面這段加入到你的BoardConfig.mk文件中
    /sdcard
    vfat
    /dev/block/mmcblk1p1
    一旦recovery.fstab已經適當的裝載,你可以開始下一步了
    5,
    現在,我們開始編譯Recovery
    make
    -j4
    recoveryimage
    這個命令用於編譯recovery鏡像
    你能使用這個命令
    make
    -j4
    recoveryzip
    用於建立一個臨時的recovery.zip刷機包在你真實的設備上測試
    你編譯好的recovery可以在"your_source_directory/OUT/target/proct/device/recovery.img"目錄下找到。而.zip刷機包可以在相同目錄下的utilities文件夾下找到。
    如果各項測試正常,就可以有一個成功的recovery
    一旦你編譯通過了recovery,通知"koush",在Github上,他就能根據你的編譯文件發放官方版的CWM
    Recovery,並使Rom
    Manager提供相應的支持。
    小貼士:
    如果你想編譯CWM6,使用以下命令同步jellybean分支源碼
    repo
    init
    -u
    git://github.com/CyanogenMod/android.git
    -b
    jellybean

    repo
    sync
    如果你改變了BoardConfig.mk文件,在編譯期間運行"make
    clobber",否則你做的更改就不會生效。

    ㈩ 編譯安卓源碼時未找到 repo'命令,怎麼回事

    把repo放到全局變數裡面或者切到repo目錄下再拉代碼

    熱點內容
    安卓手機版的蒸汽平台在哪裡下載 發布:2025-02-07 00:29:04 瀏覽:452
    php自學中心 發布:2025-02-07 00:28:50 瀏覽:269
    手機卡在哪裡設置密碼 發布:2025-02-07 00:21:25 瀏覽:706
    解壓哄睡音頻 發布:2025-02-07 00:19:56 瀏覽:158
    資料庫系統第六版答案 發布:2025-02-07 00:06:10 瀏覽:970
    fut加密毛發怎麼樣 發布:2025-02-07 00:06:01 瀏覽:868
    java三目表達式 發布:2025-02-06 23:58:41 瀏覽:741
    android開啟wifi 發布:2025-02-06 23:50:08 瀏覽:496
    騰訊雲伺服器是不是只有c盤 發布:2025-02-06 23:50:03 瀏覽:473
    安卓如何選擇相冊 發布:2025-02-06 23:49:57 瀏覽:346