[英]Confusion regarding android API levels?
我正在通过android上的Udacity课程进行学习,这些术语似乎使我感到困惑(我使用android studio 1.x最新版本)在我的build.gradle中,我有这些
compileSdkVersion 21
buildToolsVersion "21.1.2"
......
minSdkVersion 10
targetSdkVersion 20
versionCode 1
versionName "1.0"
....
compile 'com.android.support:appcompat-v7:20.0.0'
我的假设如果我将清单文件中的应用程序主题保留为默认设置,则将其设置为使用app:theme
,在styles.xml中将其默认设置为
appcompat.light.darkaction bar
我弄清楚了appcompat
主题的含义,它改变了使用主题作为目标SDK版本的方法,而与设备OS版本appcompat
当我选择API 21时,当我选择API 20时,它看起来像一个实质性应用程序,它看起来像个kitkat应用程序(都在运行ICS的设备上)
因此,目标SDK会影响我的应用的外观,而与设备操作系统无关,它定义了设备可以支持的最高Android版本,对吗?默认情况下,外观会更改为最新版本或目标API外观使用app:compat主题仍使其能够在较低的SDK上运行,最低API 10
而minsdk是支持的最小值,
我一直到这里吗?
现在让我困惑的是
什么是编译SDK,应该始终是最新的吗?
示例:资料没有在操作栏图标中显示应用程序图标,我不喜欢它,而是切换到API 20以跟随MOOC视频
但是我应该将compile sdk保留为21,不会使该应用看起来像素材一样,因为没有让我感到困惑吗?
最后一个问题,我想在运行姜饼的设备上测试该应用程序,我没有,请问您可以为姜饼设备推荐一些典型的AVD配置(因为我知道很多人在发展中国家仍在使用它) ,我应该使用适合典型姜饼设备的屏幕尺寸和像素密度吗?
因此目标SDK可以控制我的应用的外观,而与设备操作系统无关,
是。 (除其他事项外)
它定义了设备可以支持的最高Android版本,对吗?
不行 目标SDK指示您用来测试应用程序的SDK。 您可以使用目标SDK 20并在安装了API 21的设备上运行您的应用程序:它将使用KitKat l&f(即20级)。
这怎么可能 ? 当在API 21的设备上运行针对API 20的应用程序时:系统将自动启用一些向后兼容性挂钩,以便您的应用程序的行为就像在OS的旧版本(即targetVersion)上的行为一样。
支持的最大sdk是maxSdk属性(很少使用,不建议使用)。 如果您指定maxSdk 20:您将无法在运行SDK 21+的设备上安装应用
编译SDK级别是用于编译应用程序的sdk版本。 如果您选择最新版本:最新android版本的用户将受益于针对他们优化的代码。 它将允许您使用sdk的最新功能...但是在使用新的api编写代码时要小心,因为它会在较旧的设备上崩溃。
最低sdk版本可能低于编译sdk。 在您的示例中,您声明您的代码可以在API级别10上执行,但可以使用api级别21进行编译...可以,但是您必须确保不会对API-10中不存在的所有API调用都进行在运行API-10的设备上执行。
让我们说明这个棘手的问题。 假设:compileSdk = 20; targetSdk = 20且minSdk = 10
if (Build.VERSION.SDK_INT >= 13) {
apiCallToSomethingAvailableOnlySinceApi13();
}else {
//put here some alternative code to perform something similar
//(but probably degraded) feature
//on device running API 10, 11 or 12
//device with api 9 or lower are exclude anyway (because minSdk is 10)
}
总结一下:
minSDK :可以在至少具有此级别的设备上安装应用程序,并且开发人员编写了防御性代码,以确保在运行minSdk版本的设备上不会执行比minSdk更新的所有api调用。
targetSDK :该应用程序已在此级别上进行了测试,并且较新的设备必须启用向后兼容性挂钩,以便即使在较新的设备上,该应用程序的行为仍像在此级别上运行一样。
compileSDK :代码经过优化,可以在此级别上运行。 (通常可以放心地将其与targetSDK相同)
maxSDK :您无法在运行更高API的设备上安装该应用程序(不建议这样做,并且大多数情况下没有用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.