Ubuntu下Android源碼以及內核下載與編譯

1018787246 8年前發布 | 18K 次閱讀 Ubuntu Android Android開發 移動開發

本教程是基于Ubuntu下Android6.0.1源碼以及內核的下載和編譯,記錄一下,以后也就不用自己去找資料,一遍一遍的嘗試了。可以KX上網的,英語好的,直接去 AndroidSource .

下載前的準備

  • 安裝OpenJdk

    sudo add-apt-repository ppa:openjdk-r/ppa
    sudo apt-get update
    sudo apt-get install openjdk-8-jdk
    sudo update-alternatives --config java
    java -version
    
  • 安裝git

    sudo apt-get install git-core
    
  • 安裝額外的組建

    sudo apt-get install gnupg flex bison gperf build-essential \
      zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
      lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
      libgl1-mesa-dev libxml2-utils xsltproc unzip
    
組建 功能 介紹網址
gnupg 加密工具 GPG入門教程
flex The Fast Lexical Analyzer 快速的語法分析工具
bison 用于自動生成語法分析器程序 自動生成語法分析器程序
gperf 完美的散列函數生成器 使用 gperf 實現高效的 C/C++ 命令行處理
build-essential 編譯內核中make menuconfig進圖形編譯 build-essential
zip Linux 下zip包的壓縮與解壓 Linux 下zip包的壓縮與解壓
curl 網絡請求和提取工具 curl網站開發指南
zlib1g-dev 用于發現gzip和PKZIP的工具 Binary package “zlib1g-dev” in ubuntu trusty
gcc-multilib 允許在64位機器中運行32位應用 multilib
g++-multilib 同上(g++編譯工具) 多平臺支持
libc6-dev-i386 Embedded GNU C Library: 32-bit development libraries for AMD64 libc6-dev-i386
lib32ncurses5-dev 待完善 待完善
x11proto-core-dev 待完善 待完善
libx11-dev 待完善 待完善
lib32z-dev 待完善 待完善
ccache 待完善 待完善
libgl1-mesa-dev 待完善 待完善
libxml2-utils 待完善 待完善
xsltproc 待完善 待完善
unzip 待完善 待完善

下載

因為網絡以及墻的原因,我們使用清華大學鏡像,步驟如下:

  • 下載repo工具

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    
  • 下載源碼

    wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下載初始化包
    tar xf aosp-latest.tar
    cd AOSP   # 解壓得到的 AOSP 工程目錄
    # 這時 ls 的話什么也看不到,因為只有一個隱藏的 .repo 目錄
    repo sync # 正常同步一遍即可得到完整目錄
    # 或 repo sync -l 僅checkout代碼
    

ps:總共 25G ,慢慢下吧!

編譯

進入AOSP根目錄

  • 初始化編譯環境

    . build/envsetup.sh
    
  • 選擇編譯目標,選擇1,所有選項的意思,后面更新

    lunch
    
  • 開始編譯,這里使用了4個并發數:

    make -j4
    
  • 使用打包工具mmm,完成命令后會在根目錄下生成android.irp,用android studio打開一個現有項目,打開android.irp即可

    mmm development/tools/idegen/
    

運行當前版本的模擬器

  • 將emulator源碼目錄加入PATH中
export PATH=&PATH:~/bin/AOSP/out/host/linux-x86/bin
  • 設置源碼編譯輸出目錄
export ANDROID_PRODUCT_OUT=~/bin/AOSP/out/target/product/generic
  • 運行emulator
emulator

下載Android內核源代碼

  • 進入kernel目錄,下載內核

    git clone https://aosp.tuna.tsinghua.edu.cn/android/kernel/goldfish.git
    
  • 進入goldfish目錄,選擇分支

cd goldfish
git branch -a
git checkout remotes/origin/android-goldfish-2.6.29

編譯Android內核源代碼

  • 將交叉編譯工具目錄添加到PATH環境變量中

    export PATH=$PATH:~/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin
    
  • 打開goldfish下Makefile修改配置文件,找到ARCH,CROSS_COMPILE,將其修改如下

    ARCH      ?=arm
    CROSS_COMPILE  ?=/home/user/bin/AOSP/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
    arm-linux-androidkernel-
    

note:一定要設為絕對路徑。

  • 生成配置文件以及編譯
    make goldfish_defconfig
    make
    

運行當前內核版本的模擬器

  • 運行當前模擬器

    emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage
    
  • 查看內核版本

    adb shell
    cd proc
    cat version
    

BUG

  • JDK內存溢出
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/dex-dir/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by [email protected])).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] 錯誤 1

A:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server

ps:作為一個天朝的程序員

 

來自:https://blog.jiangtao.tech/2016/07/24/Ubuntu%E4%B8%8BAndroid%E6%BA%90%E7%A0%81%E4%BB%A5%E5%8F%8A%E5%86%85%E6%A0%B8%E4%B8%8B%E8%BD%BD%E4%B8%8E%E7%BC%96%E8%AF%91/

 

 本文由用戶 1018787246 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!