如何消除API26兼容提示、屏蔽Android Studio智能提示API26函数及验证Gradle配置
针对你提出的几个问题,我来逐一给出实用的解决方案:
一、如何消除「Call requires API level 26 (current min is 24)」提示?
根据使用场景,有三种靠谱的处理方式:
运行时版本判断(最推荐):如果必须使用API26的方法,一定要在代码中加入版本校验,确保低版本系统不会执行这段逻辑,示例代码如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 仅在API26及以上设备执行的代码,比如使用LocalTime LocalTime currentTime = LocalTime.now(); } else { // 低版本替代方案,比如用Calendar实现相同功能 Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); }写完版本判断后,Lint会自动识别你的兼容处理,提示自然就消失了。
使用注解抑制提示:如果你能确保这段代码只会在API26+设备运行(比如有额外的版本拦截逻辑),可以直接用注解屏蔽提示:
@SuppressLint("NewApi") private void useApi26Feature() { LocalTime currentTime = LocalTime.now(); }启用Desugar兼容Java 8 API:如果你想用
java.time这类Java 8特性又要兼容低版本,开启Desugar支持就能解决问题。只需在Gradle的android块和依赖中添加配置:android { compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }开启后,你可以正常使用Java 8的时间API,无需手动版本判断,Lint也不会再弹出API版本提示。
二、如何让Android Studio智能提示不显示API26函数?
要彻底屏蔽高版本API的智能提示,需要两步设置:
调整Android Studio的API过滤规则:
- 打开Settings(快捷键Ctrl+Alt+S),进入
Editor > Inspections > Android Lint > Correctness - 找到「NewApi」选项,勾选后在右侧的「Minimum SDK Version」下拉框选择你的minSdk版本(24)
- 再进入
Editor > General > Code Completion,取消勾选「Show items from higher API levels」,这样智能提示就只会显示API24及以下支持的函数。
- 打开Settings(快捷键Ctrl+Alt+S),进入
降低compileSdkVersion到24:
你当前用的compileSdk是26,这会让AS加载API26的SDK文档和函数列表。既然你的应用最高只运行在Android7.0(API24),把compileSdkVersion改成24,就能从根源上避免看到API26的推荐函数。
三、你的Gradle配置是否正确?
当前配置有几处需要调整,才能匹配你「最高运行在Android7.0」的需求:
compileSdkVersion建议改为24:
虽然compileSdk可以高于targetSdk,但使用和targetSdk一致的版本(24),能避免你无意中引入API26的专属API,减少兼容隐患。targetSdkVersion设置正确:
targetSdk24对应Android7.0,这个设置没问题,它告诉系统你的应用已经针对Android7.0做了适配,系统会按7.0的行为模式运行你的应用。Java8配置需补充Desugar支持:
你已经开启了Java8编译选项,但如果要兼容minSdk24,必须添加Desugar依赖(如第一部分所述),否则低版本设备会出现ClassNotFoundError。依赖库版本要匹配compileSdk:
你的support库版本是26.1.0,对应compileSdk26。如果把compileSdk降到24,需要把support库版本改成24.2.1(API24对应的最高support库版本),否则会出现编译错误。
调整后的完整Gradle配置示例(适配API24):
apply plugin: 'com.android.application' android { compileSdkVersion 24 defaultConfig { applicationId "xxx.xxx.xxx" minSdkVersion 24 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.8' implementation 'com.android.support:appcompat-v7:24.2.1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:24.2.1' implementation 'com.android.support:support-v4:24.2.1' implementation 'io.paperdb:paperdb:2.6' implementation 'com.github.yukuku:ambilwarna:2.0.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
内容的提问来源于stack exchange,提问作者kevinob

