繁体   English   中英

关于android API级别的困惑?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM