从0开始编译Android 7.1

从0开始编译Android 7.1

在这里插入图片描述

Android源码需要在Linux环境下编译,由于平时使用windows,所以使用VMware虚拟机来安装一个Ubuntu专门用于编译Android。

安装的是 Ubuntu 18.04 版本,也有很多人说用16,但实际上18也能用,所以就用18了。

0x00 在虚拟机中安装Ubuntu

这一步非常简单,去官网下载一个18.04的镜像 18.04.5 Desktop 64.iso ,然后在虚拟机用加载光盘即可。

在这里插入图片描述

随后新建一个虚拟机,注意编译Android源码需要巨大的空间和内存,因此建议按如下配置:

在这里插入图片描述

加载Ubuntu官方镜像后,VMware会提示使用简单模式安装,但不要使用,很容易出现卡住的问题,所以在配置完成后不要点击启动虚拟机,而是先在设置中将两个包含 autoins 镜像的光驱和软驱先移除,这样一来就可以手动安装Ubuntu了。

在这里插入图片描述

启动后选择安装即可,也可以按F2将语言改为中文。大部分过程参照提示,就不再赘述了。值得注意的是去掉安装过程中更新的选项,否则会因为网络问题耗时极长。

安装完成后安装 vm-open-tools 以更方便的使用虚拟机,主要用于支持虚拟机和宿主机间拖拽,分辨率调整等;

sudo apt-get install vm-open-tools open-vm-tools-desktop 

加大 swap 分区

由于虚拟机内存不够,为了避免编译失败,增加现swap分区大小,物理内存加虚拟内存至少需要 12~16GB 的空间。

#关闭swap分区
sudo swapoff -a

#将原有swapfile增大至8G
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192

#设置swap分区文件
sudo mkswap /swapfile

#启用swap分区
sudo swapon /home/swapfile

0x01 下载源码

取决于你编译的是 AOSP 还是其他如 Firefly 等开发板的系统。

前者需要通过repo来同步代码,由于直接从google官方下载太过缓慢,建议使用国内镜像。过程可参考: 清华大学AOSP镜像使用帮助 。里面有详细的步骤说明,根据网络可能需要一整天来同步代码。

后者则一般都会提供打包好的源码,避免极其耗时的下载过程,可按开发板提供的步骤说明操作,但不论是哪一种都需要配置编译所需的各种依赖。

0x02 配置编译时所需要的依赖

切换到国内仓库,提升下载速度
可用源,自选其一

http://mirrors.aliyun.com/ubuntu/
http://mirrors.163.com/ubuntu/
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/

#先备份原来的文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak

#然后将sources.list修改为如下内容:
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

完成后开始安装所需编译工具链

sudo apt-get update
#安装open jdk
sudo apt-get install openjdk-8-jre openjdk-8-jdk

#安装其余依赖
sudo apt-get install m4 g++multilib gcc-multilib lib32ncurses5-dev lib32readline6-dev lib32z1-dev flex curl bison libxml2-utils

#安装python, Ubuntu自带的是3.x版本,还需要安装一个2.7的
sudo apt-get install python

配置环境变量

#全局文件路径 /etc/profile 需要root权限
#当前用户 ~./.bashrc

#可以改全局的,也可以改当前的,在文件中加入如下内容,JAVA_HOME按实际安装好的目录来配置,下为默认的安装目录,如果你的源码有指定的jdk版本则要进行修改
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH

0x03 提前配置编译时容易错误所涉及的问题

  1. 增大 jack-server 虚拟机可用内存

    #修改源码目录下./prebuilds/sdk/tools/jack-admin文件
    #找到
    JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
    #在-cp前加入 -Xmx 配置其可用内存,建议4096m或8192m,即修改成如下
    JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx8192m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
    
  2. 增大系统线程数上限(一般不需要)

    sudo echo "kernel.pid_max=1000000" >> /etc/sysctl.conf
    sysctl -p
    

0x04 编译源码

在准备开始编译前,单独对编译使用的 Terminal 执行环境变量配置语句

export LC_ALL=C

然后执行运行环境设置脚本

source build/envsetup.sh

随后执行 lunch 按提示选择你的目标版本;

然后执行 make -j8m 开始编译!

取决于性能一次编译可能需要数个小时,可以按照具体有多少核心来设置参数

[100% 18992/18992] Checking build with...ump_intermediates/jack.check.timestamp
#### make completed successfully (41:29 (mm:ss)) ####

#看到这个就是成功啦!

对于 AOSP 可以使用 qemu 用虚拟机跑你编译好的Android,对于开发板则可以直接刷入板卡!

jack.check.timestamp

make completed successfully (41:29 (mm:ss))

#看到这个就是成功啦!




对于 `AOSP` 可以使用 `qemu` 用虚拟机跑你编译好的Android,对于开发板则可以直接刷入板卡!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值