Android Studio 最小SDK版本/目标SDK版本与编译SDK版本?

u0sqgete  于 2023-08-07  发布在  Android
关注(0)|答案(7)|浏览(604)

“最小sdk版本/目标sdk版本”和“编译sdk版本”有什么区别?我知道min和target sdk是什么意思,但是compile sdk version是什么意思?
在Eclipse中,我有min/max和target sdk,但在android studio中有这三个设置。

pxy2qtax

pxy2qtax1#

    • 最小sdk版本**是您的应用可以运行的最早版本的Android SDK。通常这是因为早期API的问题,缺乏功能,或其他一些行为问题。
      目标sdk版本是您的应用程序的目标运行版本。理想情况下,这是因为某种最佳运行条件。如果你要“为版本19制作你的应用程序”,这就是指定的地方。它可能会在早期或更高版本上运行,但这正是您的目标。这主要是为了表明您的应用程序在市场上的使用情况。
      compile sdk version是当你发布一个.apk文件时,你的IDE(或者我认为的其他编译方法)用来制作你的应用的android版本。这对于测试应用程序非常有用,因为在开发应用程序时通常需要编译应用程序。由于这将是要编译为APK的版本,因此它自然会是您的版本。同样,建议让它与您的目标sdk版本匹配。
jrcvhitl

jrcvhitl2#

Android minSdkVersion,targetSdkVersion,compileSdkVersion

公式为

minSdkVersion <= targetSdkVersion <= compileSdkVersion

字符串

minSdkVersion-是一个标记,用于定义应用程序能够安装的最低Android版本。此外,Lint使用它来防止调用不存在的API。此外,它对构建时间也有影响。因此,您可以在开发过程中使用构建风格将minSdkVersion覆盖到最大值。这将有助于使用Android团队为我们提供的所有改进来加快构建速度。例如,Java 8的某些功能只有在使用特定版本的minSdkVersion时才可用。
targetSdkVersion-如果AndroidOS版本为>= targetSdkVersion,则表示Android系统将启用特定(新)behavior更改。* 请注意,即使认为targetSdkVersion<,其中一些新行为也会默认打开,您应该阅读官方文档。

举例来说:

  • 从Android 6.0(API级别23)开始,引入了Runtime Permissions。如果将targetSdkVersion设置为22或更低,则应用程序在运行时不会向用户请求某些权限。
  • 从Android 8.0(API级别26)开始,所有notifications都必须分配给某个频道,否则该频道将不会显示。在运行Android 7.1(API级别25)及更低版本的设备上,用户只能基于每个应用管理通知(在Android 7.1及更低版本上,每个应用实际上只有一个通道)。
  • 从Android 9(API级别28)开始,Web-based data directories separated by process。如果targetSdkVersion是28+,并且您在不同的进程中创建了多个WebView,则会得到java.lang.RuntimeException
    compileSdkVersion-实际上是SDK Platform版本,告诉Gradle使用哪个Android SDK进行编译。当你想使用Android SDK的新功能或调试.java文件时,你应该注意compileSdkVersion。另一个例子是使用AndroidX强制使用compileSdkVersion- level 28。compileSdkVersion未包含在您的APK中:它纯粹用于compile time。更改compileSdkVersion不会更改运行时行为。它可以生成例如新的编译器警告/错误。因此,强烈建议您始终使用最新的SDK进行编译。您将获得对现有代码进行新编译检查的所有好处,避免使用新近弃用的API,并准备好使用新的API。另一个事实是compileSdkVersion >= Support Library version

你可以阅读更多关于它here。此外,我建议您查看迁移到Android 8.0的示例。
buildToolsVersion(https://stackoverflow.com/a/49255626/4770877)的

u4dcyp6a

u4dcyp6a3#

    • 最小sdk版本**是运行您的应用程序所需的最低Android操作系统版本。
      目标sdk版本是创建应用时运行的Android版本。
      compile sdk versionbuild tools编译和构建应用程序以进行发布、运行或调试所使用的Android版本。
  • 通常 * 编译sdk版本和目标sdk版本相同。
nfg76nw0

nfg76nw04#

compileSdkVersion:compileSdkVersion是编译应用所针对的API的版本。这意味着您可以使用该版本API中包含的Android API功能(当然也包括所有以前的版本)。如果您尝试使用API 16功能,但将compileSdkVersion设置为15,则会出现编译错误。如果您将compileSdkVersion设置为16,您仍然可以在API 15设备上运行应用程序。
minSdkVersion:min sdk版本是运行应用程序所需的Android操作系统的最低版本。
targetSdkVersion:目标sdk版本是您的应用运行的目标版本。

q3qa4bjr

q3qa4bjr5#

Reference- Medium Article by Paulina Sadowska

  1. compileSdkVersion定义Gradle将使用哪个Android SDK版本来编译您的应用。
    举例来说:
    在Android 12中,因此在SDK版本31中,引入了一个新的API,允许我们轻松实现闪屏。在这个新的API中,启动画面可以使用以下属性进行自定义:
    如果你想在你的应用程序中使用该API,你首先必须:
i)  download SDK version 31 in Android Studio,
ii) and then: update compileSdkVersion to 31 in your app.

字符串
只有这样你才能看到这些新的属性。只有这样,您才可以在代码中使用这个新的闪屏API。
2. targetSdkVersion是一个属性,它告诉系统应用是在哪个Android版本上设计和测试的。
如果用户在Android版本高于应用中定义的targetSdkVersion的设备上运行应用,则对于新的Android功能,系统可能会引入一些向后兼容行为,以确保应用仍以您设计的方式显示和运行。
举例来说:
在Android 12中,自定义通知的外观发生了变化。以前他们可以使用整个通知区域,但在Android 12系统中,将标准模板应用于所有自定义通知,因此它们看起来更加一致。如果您的targetSdkVersion低于31,系统将假定您尚未测试该功能,并将以旧方式显示通知,以最大限度地降低通知无法正常显示的风险。只有在您将目标SDK版本更新为31之后,才会使用新的通知外观。

hgtggwj0

hgtggwj06#

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

*minSdkVersion

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

此属性通知系统您已针对目标版本进行了测试,系统不应启用任何兼容性行为以保持应用与目标版本的前向兼容性。该应用程序仍然可以在较旧的版本(低至minSdkVersion)上运行。
随着Android随着每个新版本的发展,一些行为甚至外观可能会发生变化。但是,如果平台的API级别高于您的应用targetSdkVersion声明的版本,系统可能会启用兼容性行为,以确保您的应用继续以您期望的方式工作。您可以通过指定targetSdkVersion来禁用此类兼容性行为,使其与运行它的平台的API级别相匹配。例如,将此值设置为“11”或更高,允许系统在Android 3.0或更高版本上运行时将新的默认主题(Holo)应用于您的应用,并在更大屏幕上运行时禁用屏幕兼容性模式(因为对API级别11的支持隐含地支持更大屏幕)。
因此,假设您在开发应用程序时考虑到了目标API,并且已经测试了所有内容的外观/行为都符合您的预期,特别是如果您试图使用此API中引入的功能。此外,您的代码应该能够处理没有新功能的平台(下至您的minSdkVersion,例如检查你的代码是否处理了你优雅使用的缺失的API等)。但即使是较新的Android版本也可能会做一些事情来保持您的应用程序运行,否则如果操作系统没有启用“兼容性行为”,它可能会中断或看起来更时髦。
参见https://developer.android.com/studio/build

*compileSdkVersion

compileSdkVersion指定Gradle应用于编译您的应用的Android API级别。这意味着您的应用可以使用此API级别及更低级别的API功能。
理想情况下,您应该将目标和编译版本设置为与最高版本相同,当然,您不必使用任何新功能。但是,您可能希望将您的目标保持在您已经发布的旧版本,同时使用较新的编译版本以获得更好的警告/错误,直到您准备好更新目标版本。在过去,它还允许用户通过Android Gradle插件升级在代码中使用较新的Java语言功能,独立于目标Android API。
最后,不要忘记Google最近的target API level requirements,它基本上要求您在某个日期之前发布一个针对最新API级别的构建版本,如果您希望仍然可以在Play商店上使用比目标API更新的操作系统的用户。这是为了激励应用开发社区提供更新的性能/安全增强功能(例如在请求位置信息时为用户提供更多隐私选项)。
自9以来发布的每个Android版本都列出了行为更改,这些更改将影响所有应用程序,无论您的targetSdkVersion如何(例如here's Android 12's),以及当您专门针对它时会发生什么变化(例如Behavior changes: Apps targeting Android 12.当下一个版本处于预览状态时,是开始检查即将发布的app's compatibility的好时机,即使只是任何兼容模式都可以,而不需要更改compileSdkVersion,如果你还没有准备好瞄准它。Compatibility framework tools可以帮助解决这个问题,并帮助迁移到使用新的API。

3phpmpom

3phpmpom7#

这里有一个简单明了的方法来理解-

minSdkVersion应该更低,以针对将安装应用程序的Android设备的最大覆盖范围。

为了使用android的最新和优化的API,开发应用时需要compileSdkVersion

tarketSkdVersion是您希望运行应用以实现android资源全面优化的android OS的最新/版本。

注意-如果有错误请纠正我。谢了

相关问题