.. _android_build_env_ubuntu: ============================== 构建Android编译环境(Ubuntu) ============================== 编译环境准备 ================ 在 :ref:`ubuntu_linux` 中编译,需要安装以下工具包: .. literalinclude:: android_build_env_ubuntu/apt_intsall_build_dependencies :language: bash :caption: 安装Ubuntu编译LineageOS需要的依赖软件包 镜像化 ========= 我在 :ref:`android_build_env_centos8` 采用比较简单的类似 :ref:`fedora_tini_image` 方式,不过现在改进为 :ref:`ubuntu_tini_image` (独立卷) 在 ``arm64`` Ubuntu容器中 ---------------------------- 我在 :ref:`ubuntu_tini_image` 基础上构建容器中执行安装依赖软件包报错( ``aarch64`` ): .. literalinclude:: android_build_env_ubuntu/apt_intsall_build_dependencies_docker_err :language: bash :caption: 在ARM架构(aarch64)容器中安装Ubuntu编译LineageOS需要的依赖软件包报错 参考 `Hi, does anyone know why I can't install the package gcc-multilib on Ubuntu 20.04? It is absolutly necessary for starting a Yocto project. Does anyone know how I can fix this? (see DockerFile in description) Thanks for the support! `_ 原因是在 ``arm64`` 平台并不提供 ``gcc-multilib`` 软件包,如果需要使用,则应该构建一个 ``amd64`` 镜像 .. note:: 我暂时放弃在ARM架构的Docker容器中编译构建Android的编译环境 在 ``x86`` Ubuntu容器中 -------------------------- .. note:: 这段容器实践是采用 :ref:`systemd-nspawn` 一个 :ref:`debootstrap` 系统,操作是在 ``zcloud`` ( :ref:`hpe_dl360_gen9` ) - 启动 :ref:`systemd-nspawn` 容器: .. literalinclude:: ../../linux/redhat_linux/systemd/systemd-nspawn/systemd-nspawn_ubuntu-dev_android_ccache :language: bash :caption: 执行 ``systemd-nspawn`` 启动 ``ubuntu-dev`` 容器(提供独立android和ccache目录) 实际上,在 ``x86`` 的容器环境中安装编译环境依赖包也是会报错的( :ref:`systemd-nspawn` 容器环境 ): .. literalinclude:: android_build_env_ubuntu/apt_intsall_build_dependencies_systemd-nspawn_err :caption: 在X86架构容器( :ref:`systemd-nspawn` )中安装Ubuntu编译LineageOS需要的依赖软件包报错 后来参考 `How to build LineageOS inside a container `_ ,原来容器的apt配置中默认只启用了 ``main`` 仓库,要安装依赖软件包,需要修订配置添加 ``universe`` 仓库分支: .. literalinclude:: android_build_env_ubuntu/apt_sources.list :caption: 修订仓库配置文件,``jammy-updates`` 和 ``jammy-security`` 仓库以及 ``universe`` 分支 - 执行更新: .. literalinclude:: android_build_env_ubuntu/apt_update_upgrade :caption: 修改仓库配置后更新和升级 - 安装LineageOS编译依赖: .. literalinclude:: android_build_env_ubuntu/apt_intsall_build_dependencies_container :language: bash :caption: 在容器中安装Ubuntu编译LineageOS需要的依赖软件包 - 添加一个普通用户账号,注意这里关闭了密码: .. literalinclude:: android_build_env_ubuntu/adduser_admin :caption: 添加一个 ``admin`` 账号并切换到这个账号 - 设置缓存 50G 并且在 ``admin`` 账号配置中启动 ``ccache`` : .. literalinclude:: android_build_env_ubuntu/ccache :caption: 启用 ``ccache`` 下载安装 ``platform-tools`` ----------------------------- 从Google下载 `最新platform-tools `_ 并解压缩到HOME目录: .. literalinclude:: android_build_env_ubuntu/unzip_platform-tools :language: bash :caption: 将下载的 platform-tools 解压缩 并添加路径到 ``~/.profile`` : .. literalinclude:: android_build_env_ubuntu/bashrc :language: bash :caption: 添加 platform-tools 工作路径 .. note:: 在虚拟机(或容器)环境中不需要 ``platform-tools`` ,这个工具主要是为了同步镜像到手机设备,编译时不需要 Java --------- 不同的LineageOS需要不同的JDK(Java Development Kit)版本: - LineageOS 18.1+: OpenJDK 11 (included in source download) - LineageOS 16.0-17.1: OpenJDK 1.9 (included in source download) - LineageOS 14.1-15.1: OpenJDK 1.8 (install openjdk-8-jdk) 对于编译现代最新版本的LineageOS可以不用单独安装OpenJDK,而是由源代码下载时自动完成安装 Python --------- 不同的LineageOS需要不同的Python版本(已经在上文完成): - LineageOS 17.1+: Python 3 (install python-is-python3) - LineageOS 11.0-16.0: Python 2 (install python-is-python2) 至此,环境准备工作已经完成,可以 :ref:`build_lineageos_20_pixel_4` 参考 ====== - `Build LineageOS for Google Pixel 4 `_ - `How to build LineageOS inside a container `_