min SDK版本/目标SDK版本与编译SDK版本有什么区别?

Tob*_*ias 194 android android-studio

"min sdk version/target sdk version"和"compile sdk version"有什么区别?我知道min和target sdk意味着什么,但是编译sdk版本意味着什么?

在Eclipse中,我有min/max和target sdk,但在android studio中有这三个设置.

Mat*_*att 215

分SDK版本是Android SDK应用程序可以运行的最早版本.通常这是因为早期的API存在问题,缺乏功能或其他一些行为问题.

目标SDK版本为您的应用程序的版本针对上运行.理想情况下,这是因为某种最佳运行条件.如果您要"为19版创建应用程序",那么这就是指定的位置.它可以在早期版本或更高版本上运行,但这正是您的目标.这主要是为了表明您的应用程序在市场中的使用情况等.

编译SDK版本是Android平台的IDE(或编译,我想其他的部件)版本使用,使您的应用程序时,您发布.apk的文件.这对于测试应用程序很有用,因为在开发应用程序时编译应用程序是一种常见的需求.因为这将是编译到APK的版本,它自然会是您的版本的版本.同样,建议将此匹配作为目标sdk版本.

  • 我不明白“目标 sdk 版本是您的应用程序**目标**运行的版本”。因为我从不以特定的 API 级别为目标,因为我应该并且必须让我的应用程序在具有各种 API 级别的一系列设备上正常运行。 (9认同)
  • @thadeuszlay你的问题是无关紧要的,因为你应该想一想,如果你的目标是在23版上运行,那怎么可能用19编译它!请遵循公式minSdkVersion <= targetSdkVersion <= compileSdkVersion (5认同)
  • @prgmrDev如果您的应用程序在低于21的版本崩溃,您应该将您的最低SDK版本设置为21.这实际上不会将您的应用程序修复到低于21的目标,它只会注意到您的应用程序在较低版本上不受支持.您还可以选择确定究竟是什么打破了您的应用程序(版本21中的更改​​),并添加支持以处理该依赖项,但我怀疑这将是一项很多工作而不在Android初学者的范围内项目. (2认同)
  • 如果我设置 minSdkVersion =14 会发生什么;targetSdkVersion=23;并将SDK编译为19? (2认同)

anu*_*agy 71

分SDK版本是运行应用程序所需的Android操作系统的最低版本.

目标SDK版本就是Android的版本,您的应用程序创建来运行.

编译SDK版本就是Android的版本的编译工具用来编译和为了释放,运行或调试构建应用程序.

通常编译sdk版本和目标sdk版本是相同的.

  • 当他们不同的利弊时? (18认同)

yoA*_*ex5 63

公式是

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - 是一个标记,用于定义应用程序可以安装的最低Android版本.此外,Lint还使用它来阻止调用不存在的API.它还会影响构建时间.因此,您可以使用构建flavor在开发期间将minSdkVersion覆盖为最大值.利用Android团队为我们提供的所有改进,它将有助于加快构建速度.例如,某些功能Java 8仅可从特定版本的minSdkVersion获得.

targetSdkVersion - 说Android系统打开特定的行为变化.

好的例子是危险的权限(来自23 API).如果将targetSdkVersion设置为22,则应用程序不会在运行时向用户请求某些权限.

从Android 8.0(API级别26)开始,必须将所有通知分配给通道,否则它将不会显示.在运行Android 7.1(API级别25)及更低级别的设备上,用户只能按应用程序管理通知(实际上每个应用程序在Android 7.1及更低版本上只有一个频道).

compileSdkVersion - 实际上它是SDK平台版本并告诉Gradle Android SDK用于编译.当您想要使用新功能或从Android SDK调试.java文件时,您应该注意compileSdkVersion.还有一个事实是compileSdkVersion> =支持库版本

你可以在这里阅读更多相关信息.另外,我建议您查看迁移到Android 8.0 的示例

  • 此处的最佳答案,因为它实际上解释了targetSdkVersion和compileSdkVersion之间的实际区别 (7认同)

Vin*_*ohn 10

compileSdkVersion:compileSdkVersion 是应用编译所针对的 API 版本。这意味着您可以使用该 API 版本中包含的 Android API 功能(显然也可以使用所有以前的版本)。如果您尝试使用 API 16 功能但将 compileSdkVersion 设置为 15,则会出现编译错误。如果您将 compileSdkVersion 设置为 16,您仍然可以在 API 15 设备上运行该应用程序。

minSdkVersion:最小 sdk 版本是运行您的应用程序所需的 Android 操作系统的最低版本。

targetSdkVersion:目标 sdk 版本是您的应用程序要运行的版本。


Nar*_*ath 10

参考文献 - Paulina Sadowska 的 Medium 文章

\n
\n
    \n
  1. compileSdkVersion 定义 Gradle 将使用哪个 Android SDK 版本来编译您的应用程序。
  2. \n
\n
\n

例如:

\n

在Android 12中,所以在SDK版本31中,引入了一个新的API,它可以让我们轻松地实现闪屏。在这个新的 API 中,可以使用这些属性自定义启动屏幕:

\n

如果您想在应用程序中使用该 API,您首先必须:

\n
i)  download SDK version 31 in Android Studio,\nii) and then: update compileSdkVersion to 31 in your app.\n
Run Code Online (Sandbox Code Playgroud)\n

只有这样你才能看到这些新属性。只有这样,您才能在代码中使用这个新的闪屏 API。

\n
\n

2.targetSdkVersion 是一个属性,它告诉系统应用程序是针对哪个 Android 版本设计和测试的。

\n
\n

如果用户在 Android 版本高于应用程序中定义的 targetSdkVersion 的设备上运行您的应用程序,对于新的 Android 功能,系统可能会引入一些向后兼容行为,以确保您的应用程序的外观和工作方式仍然符合你设计的。

\n

例如:

\n

在 Android 12 中,自定义通知的外观发生了变化。以前他们可以使用整个通知区域,但在 Android 12 系统中,将标准模板应用于所有自定义通知,以便它们看起来更加一致。\n如果您的 targetSdkVersion 低于 31,系统将假定您尚未测试该功能\xe2\x80\x99t并将以旧方式显示通知,以最大程度地降低通知无法正常显示的风险。仅当您将目标 SDK 版本更新到 31 后,才会使用新的通知外观。

\n


qix*_*qix 7

早期的答案中有很多很好的解释,但没有链接到官方文档。如果好奇,请参阅 https://developer.android.com/guide/topics/manifest/uses-sdk-element了解:

  • minSdkVersion

如果系统的 API Level 低于该属性中指定的值,Android 系统将阻止用户安装应用程序。

旁白:如果您使用 NDK 运行本机代码,minSdkVersion也会影响 NDK 的 API 可用性。(https://developer.android.com/ndk/guides/sdk-versions

  • 目标SdkVersion

此属性通知系统您已经针对目标版本进行了测试,并且系统不应启用任何兼容性行为以维持应用程序与目标版本的前向兼容性。该应用程序仍然能够在旧版本(低至 minSdkVersion)上运行。

随着 Android 随着每个新版本的发展,某些行为甚至外观可能会发生变化。但是,如果平台的 API 级别高于应用程序的 targetSdkVersion 声明的版本,系统可能会启用兼容性行为,以确保您的应用程序继续按您期望的方式工作。您可以通过指定 targetSdkVersion 以匹配其运行平台的 API 级别来禁用此类兼容性行为。例如,将此值设置为“11”或更高允许系统在 Android 3.0 或更高版本上运行时向您的应用应用新的默认主题 (Holo),并且在较大屏幕上运行时禁用屏幕兼容模式(因为支持 API)级别 11 隐式支持更大的屏幕)。

因此,假设您在开发应用程序时考虑了目标 API,并测试了所有内容的外观/行为是否符合您的预期,特别是如果您尝试使用此 API 中引入的功能。此外,您的代码应该能够处理没有该新功能的平台(具体到您的minSdkVersion,例如检查您的代码是否处理您正常使用的缺少的 API 等)。但即使是较新的 Android 版本也可能会采取一些措施来保持您的应用程序运行,否则如果操作系统未启用“兼容性行为”,应用程序可能会崩溃或看起来更时髦。

请参阅https://developer.android.com/studio/build了解:

  • 编译SdkVersion

compileSdkVersion 指定 Gradle 应该用来编译您的应用程序的 Android API 级别。这意味着您的应用程序可以使用此 API 级别及更低级别中包含的 API 功能。

理想情况下,您将目标和编译版本设置为与最高版本相同,当然您不必使用任何新功能。但是您可能希望将目标保留在已发布的旧版本上,同时使用较新的编译版本以获得更好的警告/错误,直到您准备好更新目标版本。过去,它还允许人们通过 Android Gradle 插件升级在代码中使用较新的 Java 语言功能,而与目标 Android API 无关。


最后,不要忘记 Google 最近的目标 API 级别要求,这基本上要求您在特定日期之前发布针对最新 API 级别的构建,如果您希望仍然可供 Play 商店上使用的用户使用比您的目标 API 更新的操作系统。这是为了激励应用程序开发社区提供更新的性能/安全增强功能(例如,当您请求位置信息时为用户提供更多隐私选项)

自 9 以来发布的每个 Android 版本都列出了将影响所有应用程序的行为更改targetSdkVersion,无论您的应用程序如何(例如,这里是 Android 12),以及当您专门针对它时发生的更改(例如,行为更改:针对 Android 12 的应用程序)。当下一个版本处于预览状态时现在是开始检查您的应用程序与即将发布的版本的兼容性的好时机,即使只是任何兼容模式都可以,而无需更改您的compileSdkVersion,如果您还没有准备好瞄准它。兼容性框架工具可以帮助解决这个问题,并且迁移到使用新的 API。