目录
问题
原因
解决方法
修改配置文件,降低版本
拓展知识
什么是 API 级别?
compileSdkVersion,编译版本。
minSdkVersion,最低兼容版本。
targetSdkVersion,目标版本。
Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not find any version that matches com.android.support:appcompat-v7:32.+.
Open File
Show Details
每发布一个Android版本,就会发布一个对应的SDK(Software Development Kit,软件开发工具包)平台
'com.android.support:appcompat-v7:32.+'尚未发布,所以找不到这个包
点击Open File,打开了build.gradle(:app)文件,此默认生成文件是根据sdk tools设置的版本
修改dependencies {}中implementation 'com.android.support:appcompat-v7:32.+'
将32改成28(具体修改成多少可自己选择,降低版本即可)
compileSdkVersion 32(编译版本)和targetSdkVersion 32(目标版本)里的32,建议也修改为28,原因见下文拓展知识
点击try again 或者,到这一步一般就编译成功了,如果显示缺东西,缺什么下什么,结束
API 级别是一个对 Android 平台版本提供的框架 API 修订版进行唯一标识的整数值。
Android 平台提供了一种框架 API,应用可利用它与底层 Android 系统进行交互。 该框架 API 由以下部分组成:
框架 API 更新的设计用途是使新 API 与早期版本的 API 保持兼容。 也就是说,大多数 API 更改都是新增更改,会引入新功能或替代功能。 在 API 的某些部分得到升级时,旧版的被替换部分将被弃用,但不会被移除,这样现有应用仍可使用它们。 在极少数情况下,可能会修改或移除 API 的某些部分,但通常只有在为了确保 API 稳健性以及应用或系统安全性时,才需要进行此类更改。 所有其他来自早期修订版的 API 部分都将结转,不做任何修改。
Android 平台提供的框架 API 使用叫做“API 级别”的整数标识符指定。 每个 Android 平台版本恰好支持一个 API 级别,但隐含了对所有早期 API 级别(低至 API 级别 1)的支持。 Android 平台初始版本提供的是 API 级别 1,后续版本的 API 级别递增。
compileSdkVersion:编译版本
minSdkVersion:最低兼容版本
targetSdkVersion:目标版本
这三个SDK版本的理解:
首先看下他们的值,都是整型数值,这个值对应的就是Android平台的版本对应的API等级
在Android Studio中点击SDK Manager,
可见所有sdk版本,有API等级(整型数值)。第一列name是安卓版本名称,第二列是对应API等级
顾名思义就是设置这个Android项目是在哪个版本下编译的;
顾名思义就是设置这个Android 项目最终打包的apk能安装的最低版本的android系统。如minSdkVersion设置为18,则这个Android应用最低能安装到Android4.3的系统;
举个例子来说明,Android每发布一个新版本都有新的特性,
如Android6.0(即API等级为23)相对于Android5.0 (API Level 21)新增了动态权限申请,
如果我们将compileSdkVersion设置为21,打包出来的Apk可以在Android6.0的设备上运行,不会体现出动态权限申请的新特性(不需要动态地申请权限,也不会报错),Android新版本是向下兼容的,这个没问题;
但是如果将compileSdkVersion设置为23,那打包出来的Apk安装到Android6.0的设备上就必须要申请动态权限吗?这里就要看targetSdkVersion了,如果targetSdkVersion设置成21,那这时即使compileSdkVersion设置为23并且安装到了Android6.0设备上,这个新增的特性也不会生效;如果targetSdkVersion设置成23,那此时如果安装到了Android6.0设备上,新的特性就会体现出来了,我们在写代码的时候就要做版本适配了,就要考虑动态权限的申请了。
targetSdkVersion保证的是api的一致性,我们在追求最新编译版本时,通过设置相同的targetSdkVersion可以保证我们与之前版本的兼容性,一旦修改了targetSdkVersion,我们就必须做新版本的适配必须做好兼容。