Ubuntu 下 Android 源码以及内核下载与编译

2,179 阅读1分钟

    本教程是基于Ubuntu下Android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了。可以翻墙的,英语好的,直接去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

下载

    因为网络以及墙的原因,我们使用清华大学镜像,步骤如下:

  • 下载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根目录

  • 初始化编译环境

  • 选择编译目标,选择1,所有选项的意思,后面更新

  • 开始编译,这里使用了4个并发数:

  • 使用打包工具mmm,完成命令后会在根目录下生成android.irp,用android studio打开一个现有项目,打开android.irp即可

    mmm development/tools/idegen/

运行当前版本的模拟器

export PATH=&PATH:~/bin/AOSP/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/bin/AOSP/out/target/product/generic

下载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

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 android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx'.
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:作为一个天朝的程序员