min SDK版本和target SDK版本与compile SDK版本有什么区别?

12 浏览
0 Comments

min SDK版本和target SDK版本与compile SDK版本有什么区别?

“min sdk version/target sdk version”和“compile sdk version”之间有什么区别?我知道min和target sdk是什么意思,但compile sdk version是什么意思?\n在Eclipse中,我有min/max和target sdk,但在Android Studio中有这三个设置。

0
0 Comments

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

target sdk版本是为应用程序创建的Android版本。

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

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

当它们不同时,有什么优缺点?

出现这个问题的原因是为了解释min sdk版本、target sdk版本和compile sdk版本之间的差异以及它们的优缺点。

解决方法是对min sdk版本和target sdk版本进行了解,并根据特定的应用程序需求选择合适的compile sdk版本。以下是解决方法的详细说明:

1. Min SDK版本:

- 原因:确定应用程序可以在哪些Android设备上运行。

- 解决方法:在AndroidManifest.xml文件中指定minSdkVersion属性,设置最低要求的Android版本。

2. Target SDK版本:

- 原因:定义应用程序的目标Android版本,以便在该版本上进行测试和开发。

- 解决方法:在build.gradle文件中指定targetSdkVersion属性,设置目标Android版本。

3. Compile SDK版本:

- 原因:构建工具使用compile sdk版本来编译和构建应用程序。

- 解决方法:在build.gradle文件中指定compileSdkVersion属性,设置用于编译和构建应用程序的Android版本。

当compile sdk版本和target sdk版本相同时,优点包括:

- 开发和测试应用程序在目标版本上更容易。

- 可以使用目标版本的新特性和功能。

当compile sdk版本和target sdk版本不同时,优点和缺点如下:

- 优点:

- 可以针对较低的min sdk版本进行开发,并使用compile sdk版本中的新特性和功能。

- 可以在较低的Android版本上运行应用程序,以扩大受众范围。

- 缺点:

- 在目标版本上进行测试和开发可能更加困难。

- 可能需要处理兼容性问题,以确保应用程序在较低的Android版本上正常运行。

为了解决compile sdk版本和target sdk版本不同时的问题,可以考虑以下解决方法:

- 确定应用程序所需的最低支持Android版本,并设置min sdk版本。

- 根据应用程序的目标受众和所需的新特性,选择合适的compile sdk版本。

- 如果需要在较低的Android版本上运行应用程序,确保进行兼容性测试并处理任何兼容性问题。

总之,min sdk版本、target sdk版本和compile sdk版本在Android开发中起着重要的作用。了解它们之间的区别,并选择合适的版本,可以确保应用程序在不同的Android设备上正常运行,并充分利用目标版本的功能和特性。

0
0 Comments

Android中的minSdkVersion、targetSdkVersion和compileSdkVersion有什么区别?

minSdkVersion是一个标记,定义了应用程序能够安装的最低Android版本。它还被Lint用于防止调用不存在的API。minSdkVersion还对构建时间产生影响。在开发过程中,可以使用构建变体来将minSdkVersion覆盖为最大值,以便利用Android团队为我们提供的所有改进来加快构建速度。例如,只有在使用特定版本的minSdkVersion时,才能使用Java 8的某些特性。

targetSdkVersion用于告知Android系统在AndroidOS版本大于或等于targetSdkVersion时,启用特定的新行为更改。请注意,即使targetSdkVersion小于某个版本,某些新行为也将默认启用,您应该阅读官方文档以了解详情。例如:

- 从Android 6.0(API级别23)开始引入了运行时权限。如果将targetSdkVersion设置为22或更低,则应用程序在运行时不会向用户请求某些权限。

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

- 从Android 9(API级别28)开始,基于Web的数据目录分别由进程分隔。如果targetSdkVersion为28+且在不同进程中创建了多个WebView,将会出现java.lang.RuntimeException。

compileSdkVersion实际上是SDK平台的版本,告诉Gradle使用哪个Android SDK进行编译。当您想要使用新功能或调试Android SDK中的.java文件时,应注意compileSdkVersion。另一个例子是使用AndroidX,它强制使用compileSdkVersion 28。compileSdkVersion不会包含在您的APK中,它仅在编译时使用。更改compileSdkVersion不会更改运行时行为,但可能会生成新的编译器警告/错误。因此,强烈建议始终使用最新的SDK进行编译。这样可以获得对现有代码的新编译检查的所有好处,避免使用新弃用的API,并准备使用新的API。另一个事实是compileSdkVersion >= Support Library版本。

您可以在这里阅读更多相关信息:

https://medium.com/google-developers/picking-your-compilesdkversion-minsdkversion-targetsdkversion-a098a0341ebd

我还建议您参考Android 8.0的迁移示例:

https://developer.android.com/about/versions/oreo/android-8.0-migration.html#bfa

在这个回答中,还有一个关于targetSdkVersion和compileSdkVersion之间实际差异的最佳回答:

https://stackoverflow.com/a/49255626/4770877

感谢您的回答。我注意到在许多情况下,targetSdkVersion和compileSdkVersion是相同的。为什么Android将它们作为两个单独的字段,一个不足以处理,还是有其他特定原因?

您可以在stackoverflow的这个线程中找到更多相关信息:

https://stackoverflow.com/questions/26694108

"Android系统启用特定行为更改"是什么意思?请解释一下。

特定行为更改列在上面的 "For example" 区块中。

我对geofencingapi显示为已弃用但在较新版本的Android中仍然有效有疑问,这是什么意思?请告诉我,我是Android新手。

据我所知,"GeofencingApi"是Google Play服务的一部分,在11.0版本中被标记为已弃用。这超出了本回答的范围,请参考其他stackoverflow主题。

很好的回答!我只想再补充一句关于compile SdkVersion的内容 - 您可以使用该版本的Android API功能以及所有先前版本的功能(取自Vinay John的回答)。

0
0 Comments

什么是min SDK版本、target SDK版本和compile SDK版本之间的区别?

问题的出现原因:

该问题的原因是很多初学Android开发的人对于min SDK版本、target SDK版本和compile SDK版本的概念和作用不够清楚,容易混淆这些概念,从而导致对于如何设置这些版本的问题产生困惑。

解决方法:

对于初学者,应该清楚理解以下几点:

1. min SDK版本是指应用程序能够运行的最早版本的Android SDK。通常这是由于较早的API存在问题、缺少功能或其他行为问题所致。

2. target SDK版本是指应用程序目标运行的版本。理想情况下,这是为了获得最佳运行条件。如果你要"为版本19制作你的应用程序",那么这里就会指定这个版本。它可能在较早或较新版本上运行,但这是你的目标。主要是为了指示你的应用程序在市场等使用中的更新程度。

3. compile SDK版本是指当你发布一个.apk文件时,你的IDE(或其他编译方式)用来制作你的应用程序的Android版本。这对于测试应用程序非常有用,因为在开发过程中编译应用程序是一个常见的需求。由于这将是编译成APK的版本,它自然会成为你发布的版本。同样,建议将其与目标SDK版本保持一致。

如果你的应用在低于21的版本上崩溃,你应该将min SDK版本设置为21。这实际上不会修复应用程序在低于21的目标上的问题,它只是指出你的应用程序不支持较低的版本。你还可以选择确定是什么导致了应用程序的崩溃(在第21版中发生了什么变化),并添加支持来解决依赖关系,但我怀疑这将是很多工作,不适用于初学者的项目。

对于设置minSdkVersion = 14; targetSdkVersion = 23; 和compile SDK版本为19,这个问题是无关的,因为你应该考虑一下,如果你的目标是在版本23上运行,那么如何可能用19来编译它!请遵循以下公式:minSdkVersion <= targetSdkVersion <= compileSdkVersion。

当使用compileVersion 26时,是否可能意外使用不支持的功能或Java API,而这些功能在min SDK版本21上不支持?抱歉,我对一些基本概念不是很理解。

我不理解"target SDK版本是指应用程序目标运行的版本"。因为我从来没有针对特定的API级别进行过"target",因为我应该并且必须让我的应用程序在各种API级别的设备上正常运行。

文章整理如下:

min SDK版本是指应用程序能够运行的最早版本的Android SDK。通常这是由于较早的API存在问题、缺少功能或其他行为问题所致。

target SDK版本是指应用程序目标运行的版本。理想情况下,这是为了获得最佳运行条件。如果你要"为版本19制作你的应用程序",那么这里就会指定这个版本。它可能在较早或较新版本上运行,但这是你的目标。主要是为了指示你的应用程序在市场等使用中的更新程度。

compile SDK版本是指当你发布一个.apk文件时,你的IDE(或其他编译方式)用来制作你的应用程序的Android版本。这对于测试应用程序非常有用,因为在开发过程中编译应用程序是一个常见的需求。由于这将是编译成APK的版本,它自然会成为你发布的版本。同样,建议将其与目标SDK版本保持一致。

如果你的应用在低于21的版本上崩溃,你应该将min SDK版本设置为21。这实际上不会修复应用程序在低于21的目标上的问题,它只是指出你的应用程序不支持较低的版本。你还可以选择确定是什么导致了应用程序的崩溃(在第21版中发生了什么变化),并添加支持来解决依赖关系,但我怀疑这将是很多工作,不适用于初学者的项目。

对于设置minSdkVersion = 14; targetSdkVersion = 23; 和compile SDK版本为19,这个问题是无关的,因为你应该考虑一下,如果你的目标是在版本23上运行,那么如何可能用19来编译它!请遵循以下公式:minSdkVersion <= targetSdkVersion <= compileSdkVersion。

当使用compileVersion 26时,是否可能意外使用不支持的功能或Java API,而这些功能在min SDK版本21上不支持?抱歉,我对一些基本概念不是很理解。

我不理解"target SDK版本是指应用程序目标运行的版本"。因为我从来没有针对特定的API级别进行过"target",因为我应该并且必须让我的应用程序在各种API级别的设备上正常运行。

0