Gradle配置异常:应用仅在Nougat运行,降级SDK报错求助
嘿,我来帮你搞定这个头疼的配置问题!你遇到的情况很典型,大概率是依赖库版本不匹配或者代码里偷偷用了高版本API导致的,咱们一步步来排查:
一、先揪出依赖库的“小脾气”
你提到降低compileSdkVersion时会提示依赖仅支持Nougat,这说明你用的某些依赖库(比如支持库、第三方SDK)本身要求最低compileSdkVersion为24(Nougat)及以上。比如如果你的依赖里有com.android.support:appcompat-v7:27.x.x,那它强制要求compileSdkVersion至少27,你用25肯定会报错。
解决办法:
- 对齐支持库版本和compileSdk:如果用的是Android Support库,必须保证支持库版本和
compileSdkVersion完全一致。比如compileSdkVersion 25的话,支持库要改成25.x.x的版本,例如:dependencies { implementation 'com.android.support:appcompat-v7:25.4.0' implementation 'com.android.support:design:25.4.0' // 其他支持库也统一用25.x.x版本 } - 降级第三方SDK:如果是第三方SDK导致的,去查它的文档,找支持
compileSdkVersion 25及以下的旧版本;如果找不到,那只能无奈提升你的compileSdkVersion到依赖要求的版本(不过这时候可以继续保持targetSdkVersion 23来兼容低版本系统)。
二、检查代码里的“高版本API调用”
虽然你把targetSdkVersion设为23,但如果代码里直接调用了Nougat(API24)及以上才有的方法/类,在低版本系统上运行时会直接崩溃,看起来就像应用只能在Nougat+运行。
怎么排查:
- 用Android Studio Lint检查:点击顶部菜单
Analyze > Inspect Code,在检查结果里找「New API Usage」的警告,这些就是你用了高于minSdkVersion的API。 - 手动搜索高版本API:比如搜索
NotificationChannel(API26)、FileProvider的某些新用法、Context.getColor(int)(API23,不过用ContextCompat.getColor()就没问题)等。
解决办法:
对高版本API做版本判断,兼容低版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // 这里写Nougat及以上的代码逻辑 } else { // 低版本系统的兼容实现 }
三、对齐buildToolsVersion和compileSdkVersion
你现在用的buildToolsVersion '27.0.2'比compileSdkVersion 25高很多,虽然官方说兼容,但偶尔会导致一些隐性问题。建议改成和compileSdkVersion对应的稳定版本,比如:
android { compileSdkVersion 25 buildToolsVersion '25.0.3' // 和compileSdk版本匹配 // ...其他配置 }
四、最后检查Manifest的隐性限制
打开AndroidManifest.xml,看看有没有设置<uses-feature>标签要求了只有Nougat才有的特性,或者有没有手动写了android:minSdkVersion覆盖了build.gradle的配置(不过一般build.gradle的配置会优先生效)。
按照这几步排查下来,应该就能解决你的问题,让应用在Marshmallow及以下系统正常运行啦!
内容的提问来源于stack exchange,提问作者Bhaskar Joshi

