为何compileSdk、targetSdk设为28的Android应用可支持Android 11?
为什么Android应用可以运行在高于compileSdk、targetSdk的系统版本上
你给出的项目配置如下:
android { compileSdkVersion 28 defaultConfig { minSdkVersion 21 targetSdkVersion 28 } }
要理解这个兼容逻辑,首先要明确三个SDK版本的定位差异:
minSdkVersion:限定应用可安装的最低系统版本,低于21的Android设备无法安装该应用compileSdkVersion:仅作用于编译阶段,是你编译代码时调用API、做语法校验的参照版本,不会打包进最终的APK文件targetSdkVersion:是你给系统的兼容性标识,代表应用已经在对应版本系统上完成测试,系统不会对该应用触发更高版本的行为变更限制
能在更高版本系统上运行的核心原因有两个:
- Android系统本身做了向下兼容设计:高版本系统会完整保留所有旧版本SDK的API实现,你编译时用到的API 28的接口,在更高版本系统中依然有对应实现,不会出现找不到API的运行时错误
- 未主动调用高版本API就不会触发异常:只要你代码里没有调用高于compileSdkVersion的新API,运行时就不会出现类/方法找不到的崩溃问题。如果后续需要适配高版本新特性,只要做对应的版本判断逻辑即可,也不影响旧版本系统的运行。
需要注意的是,targetSdkVersion低于系统版本时,系统会自动开启兼容模式,屏蔽高版本的新增权限限制、行为变更,保证旧逻辑正常运行,但这也意味着你无法使用高版本系统的新特性。
内容的提问来源于stack exchange,提问作者NS Bhat
相关产品推荐
相关产品推荐

