尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Ubuntu 18.04虚拟机编译Android源码实战指南

Ubuntu 18.04虚拟机编译Android源码实战指南
📅 发布时间:2026/7/18 7:13:36

1. Ubuntu 18.04虚拟机环境下编译Android源码全指南

在虚拟机环境中编译Android源码是许多开发者必经的"成人礼"。我曾在不同配置的机器上完成过数十次完整编译,从最初耗时两天一夜的煎熬到现在三小时搞定,积累了不少实战经验。本文将基于Ubuntu 18.04 LTS环境,带你避开我踩过的所有坑。

为什么选择Ubuntu 18.04?这是Google官方推荐的Android开发环境之一,其长期支持特性(LTS)保证了系统稳定性,且社区资源丰富。虚拟机方案则能实现环境隔离,避免污染主机系统,特别适合需要同时处理多个项目的开发者。

2. 环境准备与系统配置

2.1 虚拟机创建要点

推荐使用VMware Workstation Pro 16+或VirtualBox 6.1+。关键参数设置:

  • 磁盘空间:至少250GB(Android 11源码约需150GB)
  • 内存:16GB起步(8GB也能编译但极慢)
  • CPU核心:分配宿主机50%物理核心(如8核主机给4核)

重要提示:务必选择"将虚拟磁盘存储为单个文件"选项,否则性能损失可达30%

安装Ubuntu时需注意:

# 分区方案建议: / : 50GB ext4 swap : 内存1.5倍 /home : 剩余空间 ext4

2.2 基础依赖安装

先更新软件源:

sudo apt-get update && sudo apt-get upgrade -y

安装编译必备工具链:

sudo apt-get install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev \ libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \ lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python2

踩坑记录:Ubuntu 18.04默认python3,需手动配置python2:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo update-alternatives --config python # 选择python2

3. 源码获取与环境配置

3.1 仓库工具配置

安装repo工具:

mkdir ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo

配置环境变量(添加到~/.bashrc):

export PATH=~/bin:$PATH export USE_CCACHE=1 export CCACHE_DIR=/home/$USER/.ccache ccache -M 50G # 设置缓存大小

3.2 源码下载技巧

初始化仓库(以Android 11为例):

mkdir ~/aosp && cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r48

使用清华镜像加速:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r48

同步源码(建议夜间执行):

repo sync -j4 --no-tags --no-clone-bundle

实测数据:100M宽带下完整同步约需6-8小时,遇到中断可重复执行sync命令

4. 编译过程详解

4.1 环境初始化

加载编译环境:

source build/envsetup.sh

选择编译目标:

lunch # 交互式选择 或 lunch aosp_x86_64-eng # 直接指定

4.2 核心编译命令

启动编译(使用ccache加速):

make -j$(nproc) 2>&1 | tee build.log

关键参数说明:

  • -jN:并行编译任务数(通常设为CPU核心数×1.5)
  • 2>&1 | tee:同时输出到屏幕和日志文件

性能优化:在虚拟机设置中启用"虚拟化CPU性能计数器",可提升15%编译速度

4.3 编译进度监控

查看剩余任务:

watch -n 10 'cat out/build_status.txt'

估算剩余时间:

tail -f build.log | grep -E '\[.*%\]'

典型编译时间参考(i7-10700/16GB):

  • 首次编译:3.5-5小时
  • 增量编译:10-30分钟

5. 常见问题解决方案

5.1 内存不足处理

当出现"GC overhead limit exceeded"错误时:

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

5.2 文件系统错误修复

遇到"ext4文件系统只读"错误:

sudo umount /dev/sda1 sudo fsck -y /dev/sda1 sudo mount -o remount,rw /

5.3 Java版本冲突

Android源码需要特定Java版本:

sudo update-alternatives --config javac sudo update-alternatives --config java

验证版本:

java -version # 需显示1.8.x javac -version

6. 编译后操作

6.1 镜像文件生成

查看产出物:

ls -lh out/target/product/generic_x86_64/*.img

关键镜像文件:

  • system.img:系统镜像
  • ramdisk.img:启动镜像
  • userdata.img:用户数据分区

6.2 模拟器运行

启动编译好的镜像:

emulator -show-kernel -no-snapshot -no-audio -no-window

性能提示:关闭GUI可节省30%内存:添加-no-window -gpu off参数

6.3 刷机实测

将镜像刷入真机(以Pixel 3为例):

fastboot flashall -w

注意先解锁bootloader:

fastboot flashing unlock

7. 高级技巧与优化

7.1 增量编译加速

只编译修改部分:

mmm path/to/module # 编译单个模块 mma # 编译当前目录模块

7.2 CCache配置优化

查看缓存统计:

ccache -s

重置缓存:

ccache -C

7.3 多版本管理技巧

创建版本快照:

repo forall -c 'git tag -a my_build_$(date +%Y%m%d) -m "Tagged for build"'

切换版本:

repo sync -l # 仅更新索引 repo forall -c 'git checkout my_build_20230601'

8. 虚拟机专属优化方案

8.1 磁盘性能提升

将虚拟磁盘转为独立持久模式:

sudo vmware-toolbox-cmd disk shrink /

8.2 网络加速配置

使用NAT模式并开启端口转发:

# 在宿主机执行(Windows示例) netsh interface portproxy add v4tov4 listenport=9418 listenaddress=0.0.0.0 connectport=9418 connectaddress=虚拟机IP

8.3 共享文件夹优化

避免直接编译共享文件夹中的代码:

sudo mount -t vboxsf -o rw,uid=1000,gid=1000 aosp /mnt/aosp

建议工作流程:

  1. 在共享文件夹存放源码压缩包
  2. 解压到虚拟机本地目录编译
  3. 完成后将产出物复制回共享文件夹

经过这些优化,我的虚拟机编译速度已能达到物理机80%的性能。最后提醒:编译过程中建议关闭杀毒软件实时监控,这能减少约20%的I/O等待时间。

相关新闻

  • 自动化客户情报系统:用Perplexity+Make.com构建会前200字决策摘要
  • 动态 | 团队白杰副研究员获JAG期刊2024年和2025年“最佳审稿人奖”
  • Windows11 WSL2环境下高效搭建Android开发环境

最新新闻

  • ReconPi配置攻略:API密钥与令牌设置全指南,解锁高级功能
  • XHS-Downloader:小红书无水印下载神器,一键搞定素材批量采集
  • 广东2026年度计算机技术与软件(初级、中级、高级)报名及其考试时间
  • 深入LFM2.5-Embedding-350M-8bit架构:卷积层与注意力机制的完美融合
  • Unity大地图植被渲染优化:BatchRendererGroup与JobSystem实战
  • letsencrypt-aws与AWS Certificate Manager对比分析:何时选择哪个方案

日新闻

  • 宝珀中国官方售后服务中心|官方热线和维修地址权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • # 2026年北京知识产权律师推荐怎么选?看这五点关键不踩雷 - 本地品牌推荐
  • 2026实测教程:生成的拼豆图纸不满意怎么修改才省事 - 省事研究所

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号