“最小sdk版本/目标sdk版本”和“编译sdk版本”有什么区别?我知道什么是最小和目标sdk的意思,但什么是编译sdk版本的意思?

在Eclipse中,我有min/max和目标sdk,但在android studio中有这三个设置。


当前回答

compileSdkVersion: compileSdkVersion是编译应用程序的API版本。这意味着你可以使用该版本的API中包含的Android API特性(当然也包括之前的所有版本)。如果您尝试使用API 16特性,但将compileSdkVersion设置为15,则会得到编译错误。如果你将compileSdkVersion设置为16,你仍然可以在API 15的设备上运行应用程序。

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

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

其他回答

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

目标sdk版本是你的应用程序创建运行的Android版本。

编译sdk版本是构建工具用来编译和构建应用程序以发布、运行或调试的Android版本。

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

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

minSdkVersion应该更低,以目标最大覆盖android设备上的应用程序将被安装。

在开发应用程序时需要compileSdkVersion,以使用最新和优化的android api。

tarketSkdVersion是最新的/版本的android操作系统上,你要运行你的应用程序,以实现android资源的充分优化。

注:如有错误,请指正。 谢谢

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

minSdkVersion:

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

另外:如果你使用NDK来运行本地代码,minSdkVersion也会影响NDK的API可用性。(https://developer.android.com/ndk/guides/sdk-versions)

targetSdkVersion:

This attribute informs the system that you have tested against the target version and the system should not enable any compatibility behaviors to maintain your app's forward-compatibility with the target version. The application is still able to run on older versions (down to minSdkVersion). As Android evolves with each new version, some behaviors and even appearances might change. However, if the API level of the platform is higher than the version declared by your app's targetSdkVersion, the system may enable compatibility behaviors to ensure that your app continues to work the way you expect. You can disable such compatibility behaviors by specifying targetSdkVersion to match the API level of the platform on which it's running. For example, setting this value to "11" or higher allows the system to apply a new default theme (Holo) to your app when running on Android 3.0 or higher and also disables screen compatibility mode when running on larger screens (because support for API level 11 implicitly supports larger screens).

So the assumption is that you developed the app with the target API in mind, and have tested that everything looks/behaves as you expected, esp if you're trying to use features introduced in this API. Furthermore, your code should be able to handle platforms that don't have that new feature (down to your minSdkVersion, e.g. checking your code handles missing APIs that you use gracefully, etc). But even newer Android versions may do things to keep your app running, which might otherwise break or look even funkier if the OS didn't enable "compatibility behaviors".

详见https://developer.android.com/studio/build:

compileSdkVersion:

compileSdkVersion指定Gradle应该使用的Android API级别 这意味着你的应用程序可以使用中包含的API特性 这个API级别或更低。

理想情况下,您可以将目标和编译版本设置为最高版本,当然您不必使用任何新特性。但是,在准备更新目标版本之前,您可能希望将目标版本保持在已经发布的旧版本上,同时使用更新的编译版本以获得更好的警告/错误。在过去,它还允许用户通过Android Gradle插件升级在代码中使用更新的Java语言特性,而不依赖于目标Android api。


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

Every version of Android released since 9 lists behavior changes that will impact all apps regardless of your targetSdkVersion (e.g. here's Android 12's), and what changes when you specifically target it (e.g. Behavior changes: Apps targeting Android 12. When the next version is in preview is a good time to start checking your app's compatibility with the upcoming release, even if it's just that any compat modes are ok without changing your compileSdkVersion, if you aren't prepping to target it yet. The Compatibility framework tools can help with that and in the migration to using new APIs.

compileSdkVersion: compileSdkVersion是编译应用程序的API版本。这意味着你可以使用该版本的API中包含的Android API特性(当然也包括之前的所有版本)。如果您尝试使用API 16特性,但将compileSdkVersion设置为15,则会得到编译错误。如果你将compileSdkVersion设置为16,你仍然可以在API 15的设备上运行应用程序。

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

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

min sdk版本是应用程序可以在其上运行的Android sdk的最早版本。这通常是由于早期api的问题,缺乏功能,或其他行为问题。

目标sdk版本是应用程序运行的目标版本。理想情况下,这是因为某种最佳运行条件。如果你要“为版本19制作你的应用”,这就是指定的地方。它可以在较早或较晚的版本上运行,但这是您的目标。这主要是为了表明您的应用程序在市场上的使用情况,等等。

当你发布一个。apk文件时,编译sdk版本是你的IDE(或其他编译方式)用来制作你的应用程序的android版本。这对于测试应用程序很有用,因为在开发应用程序时,编译应用程序是一个常见的需求。因为这将是要编译到APK的版本,所以它自然是您发布的版本。同样,最好让它与你的目标sdk版本相匹配。