Ubuntu 14.04编译Android 4.4.2环境配置与问题解决

📅 2026/7/19 8:13:11 👁️ 阅读次数 📝 编程学习
Ubuntu 14.04编译Android 4.4.2环境配置与问题解决

1. 项目概述:为什么选择Ubuntu 14.04 LTS编译Android 4.4.2?

十年前的技术组合在2024年依然具有特殊价值。Android 4.4.2(KitKat)作为最后一个完整支持Dalvik虚拟机的版本,至今仍被大量工业设备、车载系统和定制ROM使用。而Ubuntu 14.04 LTS作为官方推荐的编译环境,其GCC 4.8和Python 2.7工具链与Android 4.4.2源码有着天然的兼容性。

我在为某医疗设备厂商维护老旧Android系统时,发现使用现代Linux发行版编译时会出现:

  • Java版本冲突(要求JDK 1.6而非OpenJDK 11)
  • Python语法兼容问题(大量脚本基于Python 2.x编写)
  • GLIBC符号表缺失(新版Ubuntu移除了旧版动态库)

提示:虽然Ubuntu 14.04已过维护期,但通过配置准确的软件源仍可安全使用。建议在物理机或VMware Workstation上安装,WSL1/2对旧版USB驱动支持不佳。

2. 环境准备:精确到每个依赖项的配置方案

2.1 基础系统安装

使用Ubuntu 14.04.6 LTS(2019年最终版)ISO,安装时需注意:

  • 分区建议:/home至少100GB(源码+编译产物约80GB)
  • 语言环境必须选择英文(避免中文路径导致编译错误)
  • 安装类型选"Basic Ubuntu Server"(最小化安装)

2.2 关键依赖安装

执行以下命令前先运行sudo apt-get update更新源:

# 必须精确指定版本号的包 sudo apt-get install -y \ git-core=1:1.9.1-1ubuntu0.8 \ gnupg=1.4.16-1ubuntu2.6 \ flex=2.5.35-10.1ubuntu2 \ bison=2:3.0.2.dfsg-2ubuntu1 \ gperf=3.0.4-1 \ libsdl1.2-dev=1.2.15-10ubuntu1.1 \ libesd0-dev=0.2.41-10build1 \ libwxgtk2.8-dev=2.8.12.1-6ubuntu2 \ libncurses5-dev=5.9+20140118-1ubuntu1 \ lib32z1=1:1.2.8.dfsg-1ubuntu1.1

2.3 JDK 1.6特殊配置

Oracle JDK 1.6u45的安装需要手动处理:

wget https://storage.googleapis.com/android-archive/jdk-6u45-linux-x64.bin chmod +x jdk-6u45-linux-x64.bin ./jdk-6u45-linux-x64.bin sudo mkdir -p /usr/lib/jvm sudo mv jdk1.6.0_45 /usr/lib/jvm/

在~/.bashrc末尾添加:

export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45 export PATH=$JAVA_HOME/bin:$PATH

3. 源码获取与预处理技巧

3.1 使用清华镜像加速下载

创建repo工具配置:

mkdir ~/bin curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo chmod a+x ~/bin/repo

初始化仓库时使用参数:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.4.2_r2.0.1 --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

3.2 处理常见下载错误

当遇到error: Exited sync due to fetch errors时:

  1. 检查.repo/manifests/default.xml中是否包含失效Google地址
  2. 批量替换为清华镜像:
sed -i 's|https://android.googlesource.com/|https://aosp.tuna.tsinghua.edu.cn/|g' .repo/manifests/default.xml

4. 编译过程中的实战技巧

4.1 关键make参数解析

使用以下命令开始编译:

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

参数说明:

  • -j$(($(nproc)*3/2)):CPU核心数×1.5是最佳并发数
  • 2>&1 | tee build.log:同时输出到屏幕和日志文件

4.2 内存不足解决方案

当物理内存小于16GB时:

  1. 创建8GB交换分区:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  1. 在make前执行:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server

5. 典型错误与排查指南

5.1 Java版本冲突

错误特征:

make: *** [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes-full-debug.jar] Error 41

解决方案:

sudo update-alternatives --config java sudo update-alternatives --config javac # 选择/usr/lib/jvm/jdk1.6.0_45开头的选项

5.2 Python语法错误

错误特征:

SyntaxError: invalid syntax (print没有括号)

快速修复:

find . -name "*.py" -exec sed -i 's/print \(.*\)$/print(\1)/g' {} +

5.3 GLIBC缺失符号

错误特征:

undefined reference to `__memcpy_chk@GLIBC_2.3.4'

解决方案:

sudo apt-get install libc6-dev-i386=2.19-0ubuntu6.15

6. 编译成果验证与优化

6.1 生成镜像验证

编译完成后检查:

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

正常输出应包含:

  • system.img(约550MB)
  • ramdisk.img(约2MB)
  • userdata.img(约200MB)

6.2 启用ccache加速

在~/.bashrc添加:

export USE_CCACHE=1 export CCACHE_DIR=/ccache export CCACHE_SIZE=50G

初始化缓存:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

我在为某POS机厂商维护系统时发现,二次编译时ccache能使编译时间从6小时缩短至40分钟。关键是要确保CCACHE_DIR所在分区有足够空间(建议单独挂载机械硬盘)。