升级Android SDK至34后添加RECEVER_NOT_EXPORTED标志编译报错
解决“无法找到符号RECEIVER_NOT_EXPORTED”的问题
1. 修正拼写错误
你使用的RECEVER_NOT_EXPORTED是拼写错误,正确的常量名称是RECEIVER_NOT_EXPORTED(注意拼写为RECEIVER而非RECEVER)。
2. 升级Build Tools版本
当前配置的buildToolsVersion "30.0.3"版本过低,无法适配SDK 34的新API定义。将其修改为与compileSdkVersion 34匹配的版本,例如:
buildToolsVersion "34.0.0"
(可在Android Studio的SDK管理器中查看34系列Build Tools的最新可用版本)
3. 匹配Gradle插件与Gradle版本
Gradle 7.2对应的Android Gradle Plugin(AGP)版本应为7.2.x(如7.2.2)。检查项目根目录下的build.gradle文件,确保插件版本正确:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.2.2' } }
4. 确保正确引用常量
在使用该常量的代码文件中,需确认已导入android.content.Context类,或直接通过Context.RECEIVER_NOT_EXPORTED引用:
import android.content.Context; // 使用示例 registerReceiver(receiver, intentFilter, Context.RECEIVER_NOT_EXPORTED);
5. 兼容低版本SDK
由于你的minSdkVersion为21,而RECEIVER_NOT_EXPORTED是API 31(Android 12)才引入的常量,需添加版本判断避免低版本设备崩溃:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { registerReceiver(receiver, intentFilter, Context.RECEIVER_NOT_EXPORTED); } else { registerReceiver(receiver, intentFilter); }
内容的提问来源于stack exchange,提问作者박성호
相关产品推荐
相关产品推荐

