FEATURED · 精选文章

Android源码Aosp环境搭建

发布时间 / 2026/8/3 6:03:27
来源 / 创域科博编辑部
栏目 / 资讯中心
Android源码Aosp环境搭建 一编译的目的是运行看源码可以先不用学会编译二AOSP编译后的产物‌直接编译产物‌编译完成后out/target/product/对应设备目录下会生成多个独立的镜像文件包括boot.img、system.img、recovery.img、userdata.img、ramdisk.img等这些是可直接通过fastboot刷入设备的基础镜像。‌ROM包是直接编译产物的二次加工我们日常所说的可卡刷的ROM通常是update.zip格式需要在这些基础镜像的基础上手动添加刷机脚本META-INF目录、整理系统文件结构经过二次打包才能得到完整的ROM刷机包。‌三编译产物运行在不同的系统一、AOSP编译产物在Ubuntu上的运行情况AOSP编译出的x86_64架构目标镜像‌可以直接在Ubuntu系统自带的Android模拟器中运行‌无需额外刷入实体设备。你只需在Ubuntu编译环境中执行emulator命令就能启动模拟器加载编译好的AOSP系统镜像完成系统调试与验证。二、Qt编译产物的跨平台运行情况‌Linux系统‌Qt本身原生支持Linux全系列发行版只要目标Linux系统中安装了对应版本的Qt运行时库或通过静态编译、linuxdeployqt工具打包好依赖库编译出的Qt程序就可以直接在Ubuntu等Linux系统上正常运行。‌OpenHarmony系统‌Qt官方已提供Qt for HarmonyOS适配方案需先获取对应版本的Qt鸿蒙适配源码完成交叉编译生成适配OpenHarmony架构的可执行程序即可在OpenHarmony设备上运行开发过程需搭配DevEco Studio环境完成适配配置。四为什么aosp在ubantu上更友好而不是centosAOSP在Ubuntu上的开发体验比CentOS更友好核心原因集中在官方支持、依赖生态、社区资源三个维度一、官方原生适配差异谷歌官方推荐‌AOSP官方文档从早期版本开始就将Ubuntu列为唯一推荐的桌面级Linux开发系统所有编译脚本、环境配置逻辑都是优先针对Ubuntu做适配没有针对CentOS做原生兼容校验。版本匹配度高‌不同版本的AOSP都有明确对应的Ubuntu LTS版本要求从Android 6.0适配Ubuntu 14.04到Android 12适配Ubuntu 22.04版本对应关系清晰几乎不会出现系统版本和编译脚本不兼容的问题。二、依赖包安装便捷度差异Ubuntu包源覆盖全‌Ubuntu的apt源直接内置了AOSP编译所需的几乎所有依赖包包括git、gnupg、flex、bison、gcc-multilib等一条apt install命令就能批量完成安装无需手动编译源码。CentOS依赖适配难‌CentOS的yum源默认缺少大量AOSP编译必需的依赖包部分32位兼容库、旧版本Python、JDK等组件需要手动添加第三方源甚至要从源码自行编译极易出现版本冲突问题。三、社区与资源生态差异踩坑资料丰富‌全球绝大多数AOSP开发者都使用Ubuntu做编译环境网上有大量针对不同AOSP版本的避坑指南、环境配置教程遇到问题可以快速找到现成解决方案。CentOS资料稀缺‌使用CentOS编译AOSP的开发者占比极低遇到依赖缺失、脚本报错等问题时几乎找不到对应的公开参考方案排错成本会大幅提升。五qt是更适合在ubantu上运行还是centos综合你之前关注的AOSP编译环境适配、Qt跨系统运行的相关需求Qt在‌桌面开发场景下Ubuntu的适配体验更优‌而服务器部署场景下CentOS会更稳妥两者的适配差异主要体现在这些维度一、硬件与调试体验Ubuntu‌新版Ubuntu 24可以完美适配各类新硬件网卡、声卡、显卡都能被系统直接识别Qt的调试过程流畅稳定不会出现卡顿问题。CentOS‌在物理机上安装时新硬件的驱动适配难度很高即便升级内核也可能出现网卡、显卡无法识别的问题仅在虚拟机环境下Qt调试才能保持正常。二、依赖与安装便捷度Ubuntu‌官方APT源内置了Qt开发所需的几乎全部依赖库一条命令就能完成全量环境部署新手几乎不会遇到依赖缺失的问题。CentOS‌默认YUM源缺少部分Qt必需的依赖组件需要手动启用EPEL第三方源部分高版本Qt还需要自行编译依赖配置门槛更高。三、适用场景差异Ubuntu‌更适合日常Qt桌面开发、代码调试、UI界面迭代的场景开发效率更高。CentOS‌更适合Qt服务端程序的生产部署场景系统稳定性更强长期运行的安全维护周期更长。四、跨版本兼容性两者都支持Qt程序的正常编译运行但要注意不同系统的glibc版本差异直接在高版本系统编译的Qt程序可能在低版本系统上出现运行崩溃的问题需要针对性调整编译策略。六C 代码在标准 Linux如 Ubuntu/CentOS上编译出的二进制文件确实无法直接在 OpenHarmony 上运行。你的理解‌基本正确但需要更精确地界定“不能运行”的原因‌。简单来说C 代码在标准 Linux如 Ubuntu/CentOS上编译出的二进制文件确实无法直接在 OpenHarmony 上运行。这并非因为 C 语言本身有问题而是因为 ‌OpenHarmony 的底层系统环境用户态与标准 GNU/Linux 存在本质差异‌。这种差异主要体现在以下三个核心维度导致原本在 Linux 上正常的编译产物在 OpenHarmony 上失效1. C 标准库不同musl libc vs glibc这是最核心的障碍。标准 Linux‌绝大多数发行版使用 ‌glibc‌ (GNU C Library)。你在 Ubuntu 上编译程序时链接的是 glibc。OpenHarmony‌使用的是 ‌musl libc‌。后果‌glibc 和 musl libc 的二进制接口ABI不兼容。即使代码逻辑完全一样在 glibc环境下编译出的 .so 或可执行文件放到 musl 环境中会因找不到符号或结构体布局不同而崩溃。因此必须针对 OpenHarmony 的环境重新交叉编译。2. 编译工具链与目标三元组不同标准 Linux‌通常使用 gcc 或 clang目标三元组类似 x86_64-linux-gnu 或 aarch64-linux-gnu。OpenHarmony‌官方推荐使用基于 LLVM 的 ‌毕昇编译器‌ 或特定配置的 Clang目标三元组明确指定为 aarch64-linux-ohos 或 arm-linux-ohos。后果‌编译器需要知道目标系统是 OHOS以便生成符合该系统调用规范和 ABI 要求的机器码。直接用 Linux 的 gcc 编译出来的指令可能包含 OHOS 内核不支持的系统调用或错误的头文件引用。3. 系统内核与接口的细微差异虽然 OpenHarmony社区版底层也是 Linux 内核但它是一个“去 GNU 化”的系统系统调用行为差异‌例如 mmap 后文件描述符的处理、信号机制不支持 STOP/COREDUMP 等、进程优先级调度策略等OHOS 与标准 Linux 存在实现细节上的不同。驱动框架不同‌OHOS 使用 HDF (Hardware Driver Foundation) 驱动框架而非标准的 Linux 驱动模型涉及硬件交互的 C 库必须适配这一层。动态加载机制‌dlopen 等动态库加载行为在 OHOS 中有特定的安全限制和管理机制直接移植 Linux 的动态库加载逻辑可能会失败。总结为什么要“适配”所谓“适配三方库”本质上就是‌解决上述环境差异的过程‌重新编译‌使用 OHOS 专用的交叉编译工具链针对 musl libc 和 ohos 目标将源码重新编译成能在 OHOS 上运行的二进制文件。修改构建脚本‌将原本的 Makefile 或 CMakeLists.txt 适配到 OHOS 的构建系统如 GN 或 lycium 工具确保依赖路径、编译参数正确。代码级修正‌如果库中调用了 Linux 特有但 OHOS 不支持的 API如某些特殊的 /proc 文件读取、glibc 特有扩展函数需要修改 C 源码替换为 OHOS 支持的等效实现或 POSIX 标准接口。结论‌并不是 C 语言在 OpenHarmony 上“不能编译运行”而是‌为 GNU/Linux 环境编译好的二进制产物‌不能在 OpenHarmony 上运行。只要使用正确的工具链和配置针对 OpenHarmony 环境重新编译C 三方库是可以完美运行的。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻