升级target SDK到30后出现Cannot resolve symbol org.apache.commons.net错误怎么办
问题根因
Android 10(API 29)及更早版本中,部分Apache Commons通用库被纳入系统公共SDK接口白名单,应用无需额外引入依赖即可直接调用。从Android 11(API 30)开始,系统正式移除了这类第三方通用库的白名单支持,同时禁止应用直接访问系统内置的非SDK公开接口,这就是target SDK回退至29运行正常、升级到30后导入失败的核心原因。
解决步骤
- 首先确认
commons-net:commons-net:3.8依赖是声明在主module的build.gradle(而非项目根目录build.gradle)的dependencies代码块中,同步Gradle后依次执行Build > Clean Project、Build > Rebuild Project清除旧构建缓存。 - 若上述操作仍无法解决,检查build.gradle的dependencies块中是否存在冲突的排除规则,如有类似
exclude group: 'commons-net'的配置,直接删除该规则后重新同步Gradle。 - 在主module的build.gradle的android代码块中添加以下配置,解决包校验、资源冲突问题:
android { compileSdk 30 lintOptions { disable 'InvalidPackage' } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' } }
- 若项目开启了R8/ProGuard混淆,在proguard-rules.pro文件中添加commons-net的保活规则:
-keep class org.apache.commons.net.** { *; } -dontwarn org.apache.commons.net.**
内容的提问来源于stack exchange,提问作者sparkhead95
相关产品推荐
相关产品推荐

