传统 Hal 开发指南1 —— 开发环境准备
内容提要
本文介绍了传统HAL开发环境准备,包括Ubuntu1604模拟器和Android7.0源码及内核源码的准备和编译,以及Linux驱动和HAL模块的编写,JNI层代码的修正,硬件服务模块的增加和App的编写。还介绍了搭建开发环境的步骤,包括源码下载、软件安装和源码编译,以及适用于模拟器的内核编译步骤。
延伸解读
传统 HAL 的架构定位
文章指出,Android 8 之前的 HAL 以 so 库形式存在,Framework 通过 JNI 加载这些库,再借助 Binder 服务向 App 提供硬件操作接口。这意味着开发传统 HAL 需要同时涉及驱动、HAL 模块、JNI 和 Framework 服务等多个层次,对开发者的全栈能力要求较高。
源码获取的版本冲突与变通
在 Ubuntu 16.04 上直接用 repo 下载 Android 7.0 源码会遇到 Python 版本问题,调整 Python 版本又可能导致编译出错。文章给出的替代方案包括在 Ubuntu 22.04 上同步后拷贝、直接下载网盘单分支源码或使用 Docker 编译,实际选择时需权衡环境一致性与操作成本。
编译环节的常见故障点
编译 Android 7 源码时可能遇到 Jack server 相关报错,文章提示需要修改 ~/.jack-server/config.properties、~/.jack-settings 中的端口号,调整 java.security 中的 TLS 禁用算法,并修改 jack-admin 脚本。这些步骤说明旧版本 AOSP 对当前 Java 环境较为敏感,编译前应预留排查时间。
模拟器内核的独立编译与验证
除系统源码外,还需单独下载 goldfish 内核源码并切换到 android-goldfish-3.10-n-dev 分支,通过编写 build.sh 脚本设置交叉编译工具链和架构参数。编译完成后用 emulator -kernel 指定自定义内核启动,并在设置中检查内核版本,以确认环境搭建成功。
Q&A
如何准备传统HAL开发环境?
准备传统HAL开发环境需要安装Ubuntu 16.04虚拟机,下载Android 7.0源码及内核源码,并进行编译。
在Ubuntu 16.04上下载源码时可能遇到什么问题?
在Ubuntu 16.04上下载源码时可能会遇到Python版本问题,导致编译出错。
编译Android 7.0源码时如何解决Jack server相关错误?
解决Jack server相关错误需要修改配置文件,包括调整端口号和取消TLSv1、TLSv1.1的禁用设置。
需要安装哪些软件来编译Android?
需要安装的软件包括openjdk、g++、lib32等开发工具和库。
如何自定义内核并检查版本?
自定义内核后,可以通过设置中的选项检查内核版本,确保开发环境建立成功。
如何解决在Ubuntu 22.04上同步源码的问题?
可以在Ubuntu 22.04上使用repo同步源码,然后将其压缩并复制到Ubuntu 16.04上。