"min sdk version/target sdk version"和"compile sdk version"有什么区别?我知道什么是最低版本号和目标版本号,但是编译SDK版本是什么意思?
在Eclipse中,我有最低/最高和目标SDK版本,但在Android Studio中有这三个设置。
"min sdk version/target sdk version"和"compile sdk version"有什么区别?我知道什么是最低版本号和目标版本号,但是编译SDK版本是什么意思?
在Eclipse中,我有最低/最高和目标SDK版本,但在Android Studio中有这三个设置。
.apk
文件时,您的IDE(或其他编译方式)用来制作您的应用程序的Android版本。这对于测试应用程序非常有用,因为开发应用程序时编译应用程序是一个普遍的需求。由于这将是编译APK的版本,它自然会是您发布的版本。同样,建议将其与目标SDK版本匹配。Android minSdkVersion, targetSdkVersion, compileSdkVersion
公式如下:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
minSdkVersion - 是一个标记,用于定义应用程序能够安装的最低Android版本。同时,它也被Lint用于防止调用不存在的API。此外,它还会对构建时间产生影响。因此,在开发过程中,您可以使用构建变体来覆盖minSdkVersion,将其设置为最大值。这将有助于利用Android团队为我们提供的所有改进,加快构建速度。例如,只有在使用特定版本的minSdkVersion时,才能使用Java 8的某些功能。
targetSdkVersion - 如果Android操作系统版本>= targetSdkVersion
,它会告诉Android系统启用特定版本的功能。请注意,即使targetSdkVersion
小于某个值,某些新行为也会默认启用,您应该阅读官方文档。
例如:
从Android 6.0(API级别23)开始引入了“运行时权限”。如果您将targetSdkVersion设置为22或更低,您的应用程序在运行时不会向用户请求某些权限。compileSdkVersion - 实际上它是SDK平台版本,并告诉Gradle使用哪个Android SDK进行编译。当您想要使用新功能或调试Android SDK的.java
文件时,您应该注意compileSdkVersion
。另一个例子是使用AndroidX,它强制使用compileSdkVersion
- 级别28。 compileSdkVersion
不包含在您的APK中:它纯粹在编译时
使用。更改compileSdkVersion
不会改变运行时行为。它可以生成例如新的编译器警告/错误。因此,强烈建议您始终使用最新的SDK进行编译。您将获得对现有代码的新编译检查的所有好处,避免使用新弃用的API,并准备使用新的API。另一个事实是compileSdkVersion >= Support Library版本
minCompileSdk
。 - Bitwise DEVScompileSdkVersion :compileSdkVersion是应用程序编译所依据的API版本。这意味着您可以使用包括该API版本中的Android API特性(以及所有先前版本中的特性)。如果您尝试使用API 16的特性但将compileSdkVersion设置为15,则会出现编译错误。如果您将compileSdkVersion设置为16,则仍然可以在API 15设备上运行应用。
minSdkVersion :min sdk版本是运行您的应用所需的Android操作系统的最低版本。
targetSdkVersion :目标sdk版本是您的应用程序的目标运行版本。
参考- Paulina Sadowska 的 Medium 文章
- 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后,才会使用新的通知外观。
如果系统的API级别低于此属性中指定的值,Android系统将阻止用户安装应用程序。
另外:如果您使用NDK运行本地代码,minSdkVersion
也会影响NDK的API可用性。(https://developer.android.com/ndk/guides/sdk-versions)
minSdkVersion
),例如优雅地处理您使用的缺失API等。但是,即使是更新的Android版本也可能会采取一些措施来保持您的应用程序运行,否则可能会破坏或者看起来更加奇怪,如果操作系统没有启用“兼容性行为”的话。理想情况下,您应该将目标版本和编译版本设置为最高版本,并且当然您不必使用任何新功能。但是,您可能希望保持目标版本为您已经发布的旧版本,同时使用较新的编译版本以获得更好的警告/错误信息,直到您准备更新目标版本。在过去,通过 Android Gradle 插件升级,它还可以让用户在其代码中使用较新的 Java 语言特性,而与目标 Android API 独立。compileSdkVersion指定Gradle应使用哪个Android API级别来编译您的应用程序。这意味着您的应用程序可以使用包括该API级别及以下的API功能。
targetSdkVersion
是什么(例如,这里是 Android 12 的),以及当你专门针对它时会发生什么变化(例如,行为变更:针对 Android 12 的应用程序)。当下一个版本处于预览状态时,即使您还没有准备好针对该版本进行更新,也可以开始检查您的应用程序与即将发布的版本的兼容性,即使只是通过使用任何兼容模式而无需更改compileSdkVersion
。兼容性框架工具可以帮助您完成此操作并迁移至使用新 API。这里有一个简单易懂的方法 -
minSdkVersion 应该设置得更低,以便在安装应用程序的 Android 设备上获得最大覆盖范围。
compileSdkVersion 在开发应用程序时是必需的,以使用最新和优化的 Android API。
tarketSkdVersion 是您想要运行应用程序的 Android 操作系统的最新/版本,以实现 Android 资源的完全优化。
注意- 如果有错误,请纠正我。谢谢