Android源码编译环境配置

资料参考网站
Android编译环境配置
二进制驱动下载
版本分支对照
内核编译
清华源镜像

基本上需要的资料能在上面两个网站中找到。这里简单地提其中一个最为简洁的方案。

# 部署docker, 这里只展示mac怎么部署
brew cast install docker # 安装docker
# 启动安装好的docker
# 配置docker镜像源 https://docker.mirrors.ustc.edu.cn/
# 配置docker使用的cpu核实为4,内存为6G,交换内存4G。
docker pull ubuntu:14.04      # 拉取镜像
docker create -it --name ubuntu14 -v /host/androidsrc:/src  ubuntu:14.04  # 根据镜像创建一个名为ubuntu14的容器,并把主机中的/host/androidsrc目录挂载到容器中的/src目录中,前面主机的目录记得自己修改为实际的位置,android源码会下载在哪里。
docker start ubuntu14  # 启动容器ubuntu14
docker exec -it ubuntu14 bash  # 在刚才启动的容器中执行bash

在docker的ubuntu14容器中,执行下面命令

apt-get update && apt-get install -y git-core 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 python openjdk-7-jdk # 安装依赖
curl -o jdk8.tgz https://android.googlesource.com/platform/prebuilts/jdk/jdk8/+archive/master.tar.gz \
 && tar -zxf jdk8.tgz linux-x86 \
 && mv linux-x86 /usr/lib/jvm/java-8-openjdk-amd64 \
 && rm -rf jdk8.tg # 安装jdk8

把文件 init.sh 放在容器的/src目录下,chmod a+x init.sh

export PATH=/src/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export USER=$(whoami)
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6144m "
# download repo
cd src
source init.sh # 使init.sh中的环境生效
mkdir bin
curl https://storage.googleapis.com/git-repo-downloads/repo > /src/bin/repo
chmod a+x /src/bin/repo
# get source
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd aosp   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo init -b branch
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

可以使用脚本 autosync.sh 来自动完成同步

echo "======start repo sync======"
repo sync
while [ $? = 1 ]; do
        echo "======sync failed, re-sync again======"
        sleep 3
        repo sync
done
# 编译
source build/envsetup.sh
lunch xxx
m -j50

# 如果失败的话可以先启动 jackserver
prebuilts/sdk/tools/jack-admin start-server

接下来是内核部分,确认版本

cd $AOSP/device/VENDOR/NAME
git log --max-count=1
# 或者从kernel文件中获取
file kernel
grep -a 'Linux version' Image.lz4-dtb

编译

# 新版 
build/build/sh
# 旧版
cd hikey-linaro
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
make hikey_defconfig
make

刷机

# 编译完内核后
# device/common/populate-new-device.sh 中定义,或者直接拷贝到aosp就好
export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb
make bootimage
fastboot flash boot
# 可以用 fastboot boot Image.lz4-dtb 来快速测试是否正常

你可能感兴趣的:(Android源码编译环境配置)