编译Android Oreo ROM报错求助:C_INCLUDES需位于源/输出目录下
解决Android Oreo编译时C_INCLUDES路径错误的问题
嘿,这个问题我之前帮不少人排查过,本质是Android Oreo的构建系统对模块头文件路径的校验变严格了——它要求所有C_INCLUDES里的路径必须在源码树或者构建输出目录内,而你现在引用的/libstagefrighthw这类路径没有符合规范。咱们一步步来修复:
步骤1:定位并修改目标Android.mk文件
找到报错的文件:device/xiaomi/mido/camera/QCamera2/Android.mk,定位到camera.msm8953模块的C_INCLUDES配置段。
步骤2:修正路径引用方式
把原来的绝对风格路径,替换成Android构建系统认可的变量引用:
- 对于
/libstagefrighthw,改成$(call include-path-for, libstagefrighthw),或者直接指定源码树内的完整路径$(TOP)/frameworks/av/media/libstagefrighthw/include - 对于
/mm-core/inc,改成$(call include-path-for, mm-core),或者$(TOP)/frameworks/av/media/libstagefright/mm-core/inc - 对于
/libqservice,改成$(call include-path-for, libqservice),或者$(TOP)/hardware/qcom/display/libqservice/include
举个修改后的示例片段:
LOCAL_C_INCLUDES := \ $(call include-path-for, libstagefrighthw) \ $(call include-path-for, mm-core) \ $(call include-path-for, libqservice) \ # 你原来的其他合法路径...
步骤3:验证并重新编译
保存修改后,清理之前的构建缓存(可选但推荐):
make clean
然后重新启动编译流程,应该就能绕过这个路径校验错误了。
补充说明
Android Oreo引入了更严格的模块路径校验,目的是避免构建过程中引用外部未管控的文件。使用$(call include-path-for, <module-name>)是最稳妥的方式,它会自动定位到对应模块的头文件目录,比硬编码路径更适配不同的源码树结构。
内容的提问来源于stack exchange,提问作者cebulax
相关产品推荐
相关产品推荐

