b. 编译安卓7.1.1系统anbox_arm64-userdebug版本img镜像
0. 编译环境
代码分支:anbox分支源码
系统:Ubuntu22.04
内存:16G
1. 下载repo工具
mkdir -p ~/.bin
PATH="${HOME}/.bin:${PATH}"
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
chmod a+rx ~/.bin/repo
创建phyton软连接,否则repo下载源码时会报错。
sudo ln -s /usr/bin/python3 /usr/bin/python
2. 通过repo工具下载安卓系统anbox分支源码
mkdir anbox-work
cd anbox-work/
repo init -u https://github.com/anbox/platform_manifests.git -b anbox
repo sync -c -j6
3. 安装编译依赖
4. 编译安卓系统anbox分支源码
首先使用envsetup.sh脚本初始化环境
使用lunch初始化构建
提供如下全部构建目标列表。
开始全部编译
5.打包android.img镜像
构建完成后,我们需要获取结果并创建一个适合Anbox的镜像文件
(如果是编译的其他架构,使用您的目标架构名称替换arm64)
最后在$HOME/anbox-work/vendor/anbox得到一个android.img
6.写在最后
编译过程中遇到的一些问题以及解决办法。
问题1
在Ubuntu20.04遇到了,You asked for an OpenJDK based build but your version is java version "1.8.0_77" Java(TM) SE Run
解决方法:原因是编译Android的源码时要安装 openjdk而不是jdk,安装openjdk即可。
问题2
解决方法:这个错误是由于本地LC_ALL变量导致的,可以在编译前将这个值设置为C即可,即:export LC_ALL=C
问题3
编译报错:SSL error when connecting to the Jack server......recipe for target 'ninja_wrapper' failed
解决方法:
1、cd /etc/java-8-openjdk/security/到该目录下;
sudo vim java.security(注意需要用root用户去打开并修改);
remove "TLSv1, TLSv1.1"这两个配置;
2、重启server
问题4
编译报错Error: Could not find or load main class com.tonicsystems.jarjar.Main
解决方法:
然后按上面的步骤4重新编译
问题5
编译anbox_arm64-userdebug版本报错,
external/libavc/decoder/arm/ih264d_function_selector.c:67: error: undefined reference to 'ih264d_init_function_ptr_av8'
解决方案:
修改文件,./external/libavc/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ARCH_ARM_HAVE_NEON:=true //增加这一行
# encoder
include $(LOCAL_PATH)/encoder.mk
# decoder
include $(LOCAL_PATH)/decoder.mk