升级com.google.firebase:firebase-firestore:16.0.0后遇InvalidPackage lint错误求助
解决Firebase Firestore 16.0.0更新后的Lint InvalidPackage错误
这个问题我之前碰到过好几次,本质是grpc依赖里的DnsNameResolver.JndiResolver类引用了Android SDK不包含的javax.naming相关包,而Lint的InvalidPackage规则会把这种跨平台的包引用标记为错误。下面给你几个实用的解决办法:
方法一:禁用grpc的JndiResolver(推荐)
Android环境下grpc根本用不上JndiResolver,我们可以直接让它不加载这个类,从根源避免lint报错。只需要在你的AndroidManifest.xml里添加一行meta-data:
<meta-data android:name="io.grpc.internal.DnsNameResolver.disable_jndi" android:value="true" />
这样grpc会自动切换到Android兼容的DNS解析实现,完全不影响功能,还能保留Lint的其他检查规则。
方法二:在Lint配置中忽略特定错误
如果不想修改Manifest,也可以针对性地忽略这个InvalidPackage错误,既可以全局禁用,也可以精准只忽略grpc相关的问题:
方式1:通过build.gradle全局禁用
在app模块的build.gradle里添加Lint配置:
android { lintOptions { // 全局忽略InvalidPackage错误(简单粗暴,但会错过其他合法的InvalidPackage提示) disable 'InvalidPackage' // 或者只在Release构建时忽略(如果Debug模式不想关闭检查) checkReleaseBuilds false } }
方式2:通过lint.xml精准忽略
在app/src/main目录下创建lint.xml文件,只忽略grpc那个类的包引用问题:
<?xml version="1.0" encoding="UTF-8"?> <lint> <issue id="InvalidPackage"> <ignore path="**/io/grpc/internal/DnsNameResolver$JndiResolver.class"/> </issue> </lint>
这种方式不会影响其他地方的InvalidPackage检查,比全局禁用更严谨。
方法三:升级Firebase Firestore版本
如果项目允许的话,直接把Firebase Firestore升级到17.0.0及以上版本,后续的Firebase版本已经调整了grpc依赖,不会再触发这个Lint错误。不过如果因为兼容性问题不能升级,前面两种方法更合适。
内容的提问来源于stack exchange,提问作者Sam Stern
相关产品推荐
相关产品推荐

