You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP编译失败求助:ssfilter.y语法冲突致ninja构建终止

解决AOSP编译中ssfilter.y的shift/reduce冲突问题

我之前编译老版本AOSP时也碰到过一模一样的问题,核心是external/iproute2/misc/ssfilter.y语法文件存在35个shift/reduce冲突,新版本bison会因为这类冲突直接终止编译(旧版本可能仅弹出警告)。给你几个可行的解决方案:

方案1:使用AOSP预编译的bison工具(最推荐)

AOSP自带了适配项目的构建工具,大概率是你编译时调用了系统自带的bison,而非项目预编译版本。可以通过以下步骤强制切换:

  • 先清理之前的构建缓存:
    m clean
    rm -rf out/target/product/generic/obj/EXECUTABLES/ss_intermediates/
    
  • 重新初始化编译环境并指定工具路径:
    source build/envsetup.sh
    lunch aosp_arm-eng
    export PATH=$(pwd)/prebuilts/build-tools/linux-x86/bin:$PATH
    m -j$(nproc)
    

这样会优先使用AOSP预编译的bison,它对项目语法文件兼容性更好,不会因这类冲突报错。

方案2:修改ssfilter.y解决语法冲突

如果你懂Yacc/Bison语法,可以手动修复歧义规则:
编辑external/iproute2/misc/ssfilter.y,在文件开头附近添加优先级声明,比如针对运算符号的优先级:

%left '+' '-'
%left '*' '/'
# 可根据bison输出的具体冲突详情,针对性调整优先级规则

修改后同样清理缓存再重新编译。

方案3:降低bison的严格性

如果系统bison版本过高,可以通过编译参数忽略冲突:
找到external/iproute2/misc/Android.mk中ssfilter的编译规则,将bison命令修改为:

prebuilts/build-tools/linux-x86/bin/bison -d --defines=out/target/product/generic/obj/EXECUTABLES/ss_intermediates/ssfilter.h -o out/target/product/generic/obj/EXECUTABLES/ss_intermediates/ssfilter.c -Wno-conflicts-sr external/iproute2/misc/ssfilter.y

添加-Wno-conflicts-sr参数,禁止shift/reduce冲突的错误提示,让bison继续生成代码。

另外提一句:你看到的android_stubs_current和BOARD_SEPOLICY_VERS警告都是非致命的,不会影响构建完成,不用过度在意。

内容的提问来源于stack exchange,提问作者Stephan John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:10:51