调试Android应用时出现java.lang.NoSuchMethodError错误是什么原因?
问题根因
requestPermissions方法是 Android 6.0(API 等级23)才添加到系统原生Activity类的接口,你直接在LoginActivity中调用该原生方法,没有做向下兼容处理,运行在低于 API23 的设备、或者项目compileSdkVersion低于23时,就会触发方法找不到的NoSuchMethodError异常。- 报错中提到的
classes2.dex是多dex拆分产物,不是本次问题的诱因。
修复步骤
- 将报错的代码行替换为兼容包的权限申请写法:
原代码:
requestPermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
修改为:
// 导入对应包:androidx.core.app.ActivityCompat 或者 android.support.v4.app.ActivityCompat ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 1);
- 补充配套逻辑:
- 提前校验项目的
build.gradle配置,确保compileSdkVersion>= 23 - 权限申请前先调用
ContextCompat.checkSelfPermission判断权限是否已经被授予,避免重复申请 - 重写
onRequestPermissionsResult方法,接收权限申请结果,处理用户同意/拒绝权限的后续业务逻辑
内容的提问来源于stack exchange,提问作者user9900365
相关产品推荐
相关产品推荐

