Android 16 编译错误:`<uses-library>` 标签不匹配问题解析与解决方案
2025-10-02 / 龙之叶   

问题背景

在进行 Android 16 编译时,可能会遇到编译过程中出现类似 error: mismatch in the <uses-library> tags between the build system and the manifest: 的错误。这一错误通常是由于 APK 的 AndroidManifest.xml 文件中声明了 <uses-library> 标签,但编译环境中却缺少对应的依赖库所导致的。

错误原因

当 APK 的 AndroidManifest.xml 文件中包含 <uses-library> 标签时,它指定了该 APK 需要依赖的特定库。然而,如果编译系统(build system)中没有找到这些指定的库,或者库的版本与 APK 中声明的版本不匹配,就会导致编译失败,并抛出上述错误。

解决方案

针对这一问题,我们提供了以下两种解决方案,用户可以根据实际情况选择适合的方式进行处理。

方案一:暴力屏蔽检测(不推荐长期使用)

对于急需解决编译问题,且对编译系统安全性要求不高的场景,可以通过修改设备配置文件来暴力屏蔽对 <uses-library> 标签的检测。具体操作如下:

  1. 打开 device/sprd/generic_mpool/product/var.mk 文件。
  2. 在文件中添加以下行:
1
PRODUCT_BROKEN_VERIFY_USES_LIBRARIES := true

此设置将强制编译系统忽略 <uses-library> 标签的不匹配问题,但可能会引入潜在的安全风险或兼容性问题,因此不推荐长期使用。

方案二:在 APK 编译脚本中禁用库验证(推荐)

更推荐的方式是在 APK 的编译脚本中明确禁用对 <uses-library> 标签的验证。根据使用的编译脚本类型(Android.bp 或 Android.mk),操作方式有所不同:

对于 Android.bp 文件

Android.bp 文件中,添加或修改以下配置:

1
2
3
4
enforce_uses_libs: false,  // 禁用库验证
dex_preopt: {
enabled: false, // 禁用 DEX 预优化
},

对于 Android.mk 文件

Android.mk 文件中,添加或修改以下配置:

1
2
LOCAL_ENFORCE_USES_LIBRARIES := false  // 禁用库验证
LOCAL_DEX_PREOPT := false // 禁用 DEX 预优化

通过上述配置,可以禁用编译系统对 <uses-library> 标签的验证,同时避免了对整个编译系统的全局修改,更加安全可靠。

总结

在 Android 16 编译过程中遇到 <uses-library> 标签不匹配的错误时,用户应根据实际需求选择合适的解决方案。对于临时解决问题,可以考虑暴力屏蔽检测;但从长期安全和兼容性角度考虑,推荐在 APK 编译脚本中禁用库验证。

本文链接:
http://longzhiye.top/2025/10/02/2025-10-02/