Ubuntu18.04编译Android-7.1.2_r36 AOSP失败求助
解决AOSP android-7.1.2_r36编译中snakeyaml的java.beans类找不到问题
从你的错误日志来看,核心问题是snakeyaml模块在编译时试图引用JDK的java.beans包下的类(比如IntrospectionException、Introspector),但AOSP的编译环境默认仅使用Android核心类库,不包含JDK的这些类。你的内存配置足够,所以可以排除内存不足的影响,下面是具体的修复方案:
方案一:修改snakeyaml的编译配置(推荐)
- 找到snakeyaml模块的Android.mk文件,路径通常为
external/snakeyaml/Android.mk - 打开文件后,在
LOCAL_MODULE相关配置后添加以下编译参数:# 允许编译器访问JDK中的符号类,解决java.beans依赖问题 LOCAL_JAVA_FLAGS += -XDignore.symbol.file=true # 依赖JDK相关类库 LOCAL_JAVA_LIBRARIES += jdk-libs - 保存文件后,清理旧的编译缓存:
# 清理全局编译缓存 make clean # 删除snakeyaml的中间生成文件 rm -rf out/target/product/generic_x86_64/gen/JAVA_LIBRARIES/snakeyaml_intermediates/ - 重新初始化编译环境并开始编译:
source build/envsetup.sh lunch aosp_x86_64-eng # 根据CPU核心数调整-j后的数字,比如-j16 make -j16
方案二:确认JDK版本兼容性
虽然你使用的OpenJDK 1.8.0_212符合AOSP 7.1.2的要求,但可以再验证一下JDK的配置:
- 执行
java -version和javac -version确认版本一致 - 确保没有其他版本的JDK干扰环境变量,可以用
update-alternatives --config java检查默认JDK
问题根源说明
AOSP的编译环境为了保证生成的镜像符合Android的规范,默认会限制模块只能使用Android核心类库(bootclasspath),而java.beans属于JDK的非Android标准类,所以编译器找不到这些类。添加-XDignore.symbol.file=true参数会让编译器忽略Android的符号限制,允许访问JDK中的这些类,从而解决依赖问题。
内容的提问来源于stack exchange,提问作者Alan Xie
相关产品推荐
相关产品推荐

