Android S编译自定义动态库提示jni_headers依赖缺失问题求助
问题根因
Android 12(S)起新增了分区头文件依赖限制规则,原生jni_headers头库默认仅对system、vendor分区的模块开放,product分区的模块默认无权限直接依赖该头库,因此触发缺失依赖的编译报错。
修复方案
根据你的动态库使用的API类型选择对应方案即可:
- 若你的动态库仅使用NDK公开API,无平台私有接口依赖
在模块Android.bp中添加sdk_version配置,指定你适配的最低NDK版本,保留原有的header_libs: ["jni_headers"]即可。配置后编译系统会自动从NDK工具链中调用对应版本的jni.h头文件,无需依赖平台内置的jni_headers库。
配置示例:cc_library_shared { name: "mylib", // 原有配置保持不变 header_libs: ["jni_headers"], sdk_version: "30", product_specific: true, // 原有product分区声明保留 // 其余配置不变 } - 若你的动态库需要依赖平台内部接口,无法用NDK公开SDK编译
在模块Android.bp中添加platform_include: true配置,声明允许模块访问平台内部头文件,保留header_libs: ["jni_headers"]即可。
配置示例:cc_library_shared { name: "mylib", // 原有配置保持不变 header_libs: ["jni_headers"], platform_include: true, product_specific: true, // 原有product分区声明保留 // 其余配置不变 }
注意
不要直接将jni.h复制到源码目录使用,不同Android版本的jni.h存在版本差异,该方式会引入后续版本升级的兼容风险。
内容的提问来源于stack exchange,提问作者Bajrang Hudda
相关产品推荐
相关产品推荐

