Ubuntu 虚拟机中编译 Android 源码完整指南(含分卷合并、虚拟内存配置、复制粘贴设置及依赖库安装)

适用场景 :在 Windows 主机上通过 VMware/VirtualBox 安装 Ubuntu 虚拟机,用于编译 OK3568 平台的 Android 11 源码。
关键词:Android 源码编译、Ubuntu 虚拟机、分卷合并、swap 虚拟内存、VMware 复制粘贴、编译依赖库


一、开启虚拟机双向复制粘贴(Windows ↔ Ubuntu)

为了方便在 Windows 和 Ubuntu 虚拟机之间复制命令、路径或日志,建议开启双向剪贴板共享。

VMware 用户:

登陆VMware官网https://www.vmware.com/cn.html下载Workstation Pro并获取产品密匙。VMware是付费软件,需要自行购买,或者使用VMware提供的试用版本。

VMware环境搭建:

https://cloud.tencent.com/developer/article/2157601

  1. 启动 Ubuntu 虚拟机。

  2. 点击顶部菜单栏:虚拟机 → 安装 VMware Tools

  3. 在 Ubuntu 中安装 Open VM Tools:

    复制代码
    sudo apt update
    sudo apt install open-vm-tools-desktop
  4. 重启虚拟机:

    复制代码
    sudo reboot
  5. 重启后即可实现 Windows 与 Ubuntu 之间的双向复制粘贴

VirtualBox 用户:

下载地址:https://www.virtualbox.org/wiki/Downloads

VirtualBox编译环境搭建:https://wiki.lckfb.com/zh-hans/tspi-rk3566/sdk-compilation/virtualBox-ubuntu-compiling-environment.html

复制代码
sudo apt update
sudo apt install virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
sudo reboot

并在 VirtualBox 设置中启用"双向剪贴板"。

ubuntu虚拟机:

我们选择安装的Ubuntu 版本是18.04,首先去Ubuntu官网获取Ubuntu18.04 64位镜像,下载地址为:http://sources.ubuntu.com/18.04/下载"ubuntu-18.04.6-desktop-amd64.iso"这个版本。


二、安装编译所需的基础依赖库

⚠️ 以下操作需确保 Ubuntu 能正常访问外网(可 ping www.baidu.com 测试)。

2.1 安装通用开发基础库(3.1.6 节)

这些是 Linux 下进行 C/C++ 编译、压缩解压、网络调试等常用工具:

复制代码
sudo apt-get update
sudo apt-get install build-essential      # 提供 gcc/g++/make 等核心编译工具
sudo apt-get install libncurses*          # 用于 menuconfig 等文本界面
sudo apt-get install lzop                 # LZO 压缩工具(内核常用)
sudo apt-get install net-tools            # 包含 ifconfig、netstat 等网络工具

2.2 安装 OK3568 Android 编译专用依赖库(3.1.7 节)

这是针对 Rockchip OK3568 平台 Android 11 源码编译所需的完整依赖包集合:

复制代码
sudo apt-get update

# 基础工具
sudo apt-get install openssh-server vim git fakeroot

# 核心编译依赖(一行命令,避免遗漏)
sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler python-pip libncurses5-dev

# Java 环境(Android 11 通常使用 OpenJDK 8)
sudo apt-get install openjdk-8-jdk

# AOSP 官方推荐依赖(兼容 32/64 位交叉编译)
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

# 特定版本 C 库(部分厂商脚本强依赖)
sudo apt-get install g++-7-multilib libc6=2.27-3ubuntu1.6 libc6-i386 libc6-dev

说明

  • 若提示 libc6 版本冲突,可先运行 apt policy libc6 查看当前版本,或联系厂商确认是否必须锁定该版本。
  • 部分包(如 g++-7-multilib)在较新 Ubuntu(如 22.04+)中可能需添加旧版仓库,建议使用 Ubuntu 18.04 或 20.04 以获得最佳兼容性。

三、导入并合并 Android 源码分卷

厂商常将源码拆分为多个 .tar.bz2.* 分卷文件。

步骤如下:

  1. 确保所有分卷在同一目录下

    例如:

    复制代码
    OK3568-android11-source.tar.bz2.001
    OK3568-android11-source.tar.bz2.002
    ...
  2. 合并分卷

    复制代码
    cat OK3568-android11-source.tar.bz2.* > OK3568-android11-source.tar.bz2
  3. 解压

    复制代码
    tar -xjvf OK3568-android11-source.tar.bz2

四、配置虚拟内存(Swap)防止编译中断

Android 编译内存消耗极大,强烈建议物理内存 ≥16GB。若不足,请扩展 swap:

复制代码
sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

验证:

复制代码
free -h  # 查看 Swap 是否显示 ~16G

五、开始编译 Android 源码

进入源码根目录,执行:

复制代码
进入源码目录:cd ~/forlinx/OK3568-Android11-Source
删除旧的输出目录:rm -rf out/
加载环境变量脚本:source build/envsetup.sh
选择编译目标:lunch rk3568_r-userdebug
如果你看到 lunch 提示找不到 rk3568_r-userdebug,说明你的源码中没有这个产品配置,请检查是否下载完整或是否拼写错误。
开始编译:./build.sh -A -J 2
  • -A:编译完整 Android 系统(All)。
  • -J 2:使用 2 个线程编译(根据 CPU 核心数调整,避免系统卡死)。

🔔 首次编译耗时较长(2~8 小时),请保持电源和网络稳定。


六、常见问题排查

问题 解决方案
build.sh: Permission denied 运行 chmod +x build.sh
repo: command not found 确保已安装 repo,并配置 PATH
编译中途卡死/系统无响应 检查内存和 swap,减少 -J 线程数
openjdk-8-jdk 找不到 Ubuntu 22.04+ 需手动添加旧版仓库或使用 Adoptium

七、结语

本文从虚拟机配置、依赖安装、源码处理到最终编译,提供了一套完整的 OK3568 Android 11 源码编译流程。虽然在虚拟机中编译效率较低,但对于学习 Android 系统架构、驱动开发或固件定制非常有价值。

📌 建议:生产级开发请使用物理机(32GB+ 内存,SSD 硬盘),可大幅提升编译速度。

相关推荐
Getgit2 小时前
Linux系统的特点有哪些
java·linux·运维·网络·sql
Maggie_ssss_supp2 小时前
Linux-Percona XtraDB Cluster (PXC)集群部署实战
linux·运维·服务器
十月南城2 小时前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算
吃花椒的冰冰3 小时前
ubuntu自动检测断网重联
运维·服务器
刘哥测评技术zcwz6263 小时前
希音shein自养号测评怎么做,有哪些技术要求
运维·服务器·网络
a程序小傲3 小时前
国家电网面试被问:FactoryBean与BeanFactory的区别和动态代理生成
java·linux·服务器·spring boot·spring·面试·职场和发展
txinyu的博客3 小时前
static_cast、const_cast、dynamic_cast、reinterpret_cast
linux·c++
“αβ”3 小时前
TCP相关实验
运维·服务器·网络·c++·网络协议·tcp/ip·udp
qq_254674414 小时前
Cisco Nexus 9504交换机上
java·linux·服务器