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 硬盘),可大幅提升编译速度。

相关推荐
跨境数据猎手11 小时前
大数据在电商行业的应用
大数据·运维·爬虫
linyanRPA12 小时前
影刀RPA店群自动化实战:多店铺活动自动报名与促销管理架构设计
运维·自动化·办公自动化·rpa·python脚本·爬虫自动化·店群自动化
mounter62512 小时前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
会Tk矩阵群控的小木12 小时前
安卓群控系统对于游戏工作室实战教程
android·运维·游戏·adb·开源软件·个人开发
赵渝强老师12 小时前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
佛山个人技术开发12 小时前
GitCode SSH连接配置教程
运维·ssh·gitcode
Qt程序员13 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
The Sheep 202313 小时前
Vue复习
linux·服务器·数据库
兄台の请冷静13 小时前
Linux 安装es
linux·elasticsearch·jenkins
fengyehongWorld13 小时前
Linux rg命令
linux