关于android API级别的困惑?

关于android API级别的困惑?,android,android-studio,avd,android-sdk-tools,build.gradle,Android,Android Studio,Avd,Android Sdk Tools,Build.gradle,我正在学习一门关于android的Udacity课程,这些术语似乎让我感到困惑 我使用android studio 1.x的最新版本 在我的身材里,格拉德尔,我有这些 compileSdkVersion 21 buildToolsVersion "21.1.2" ...... minSdkVersion 10 targetSdkVersion 20 versionCode 1 versionName "1.0" ....

我正在学习一门关于android的Udacity课程,这些术语似乎让我感到困惑 我使用android studio 1.x的最新版本 在我的身材里,格拉德尔,我有这些

   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主题保留为默认,我会将其设置为使用app:theme,而在styles.xml中则默认为使用app:theme

appcompat.light.darkaction bar 
我理解了appcompat主题的意思,即它将更改为在目标SDK的版本中使用主题,而不管设备操作系统的版本如何

当我选择API 21时,它看起来像一个材料应用程序 当我选择API 20时,它看起来像一个kitkat应用程序 都在我运行ICS的设备上

因此,无论设备操作系统如何,target SDK都控制着我的应用程序的外观, 它定义了设备可以支持的最高版本的android,对吗?默认情况下,外观更改为最新版本或目标API外观,同时使用app:compat主题仍使其能够在较低的SDK上运行,低至API 10

minsdk是支持的最小值

我一直到这儿吗

现在让我困惑的是

什么是CompileSDK,它应该始终是最新的吗

示例:材质没有在操作栏图标中显示应用程序图标,我不喜欢它,并切换到API 20 接下来是MOOC视频

但我是否应该将编译sdk保留为21,这会不会使应用程序看起来像材料,因为我很困惑,因为它没有

最后一个问题,, 我想在运行姜饼的设备上测试应用程序,我没有, 你能为姜饼设备推荐一些典型的AVD配置吗?因为我知道很多人在发展中国家仍然使用它, 我应该使用什么样的ram、屏幕大小和像素密度来适合典型的姜饼设备

因此,无论设备操作系统如何,target SDK都在控制我的应用程序的外观

对。除其他外

它定义了设备可以支持的最高版本的android,对吗

不!目标SDK表示用于测试应用程序的SDK。您可以使用目标SDK 20并在安装了API 21的设备上运行应用程序:它将使用KitKat l&f i.e level 20

怎么可能呢?当以API 20为目标的应用程序在具有API 21的设备上运行时:系统将自动启用一些向后兼容性挂钩,以便您的应用程序的行为与旧版本(即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的设备上安装该应用程序。不推荐使用,而且大多数情况下都没有用。

@DroidIcs抱歉,我看不出问题所在。你能说得更准确些吗?检查你对minsdk的解释