2016-10-26 30 views
3

当Google发布Android SDK的更新时,什么使Android Studio中开发的项目保持最新的可靠过程是什么?确定最新的稳定Android SDK

我只想更新到最新的稳定版本,而不是测试版本。例如,目前,我对Android 7.1.1(API 25)SDK不感兴趣,因为它仍处于预览状态。同样,我不想要任何Android支持库的测试版,即使lint告诉我有一个可用。

具体而言,如何确定从SDK Manager安装哪些软件包,以及如何确定要在build.gradle中指定哪些版本的声明,如下所示?

compileSdkVersion xxx 
... 
targetSdkVersion xxx 
... 
compile 'com.android.support:support-v4:xxx' 

更新:对于进一步的背景,看到新的Android Studio的问题,Lint prompts upgrade to partially distributed SDKs,通过注释的讨论提示。

+1

将'compileSdkVersion'设置为最高的生产API级别(目前为24级)。将'targetSdkVersion'设置为适合您的应用程序的任何内容(如果您已准备好,则为24),如果不是,则将其降低。支持库主要版本应该与'compileSdkVersion'相匹配,并使用最新的minor/patchlevel。 – CommonsWare

+0

我正在寻找独立于版本的流程,而不是针对今天的特定答案。例如,如何快速确定API级别24是最近的稳定性?有没有一个规范的网页发布这个?支持库有次要版本。如何确定他们最新的稳定版本? –

+0

“例如,如何快速确定API级别24是最近的稳定性?” - 因为发布了Android 7.0,并且Android 7.0是API Level 24(参见'Build.VERSION_CODES')。 “是否有一个标准的网页发布这个?“ - Android操作系统版本受到很多主要新闻媒体的影响,”如何确定他们最新的稳定版本?“ - 假设没有附加'-alpha'或类似的后缀,这是最高的数字。 – CommonsWare

回答

0

我只想更新到最新的稳定版本,而不是测试版本。

关于支持库,alpha和beta在工件版本方面被公布。例如,ConstraintLayout库目前是-beta1,IIRC。

对于Android SDK,过去三年的规则是,如果它被称为“开发人员预览版”,那么它不是您认为是稳定版本的。如果它有一个固定的Android版本号(例如7.0),它是一个稳定版本。

您已经表达了对Android 7.1的关注,它对于之前的规则有些例外。恕我直言,谷歌搞砸了,大概是由于典型的执行白痴。实际上,API Level 25是最终版本,因为它们已经在运送带有Android 7.1的设备(Pixel),并且源代码位于AOSP存储库中。由于他们描述的是the APIs as final,我也认为他们是最终的,并且在推荐人们对他们进行编纂时感到舒服。它的“预览”方面更多的是在其他硬件的可用性方面,这似乎主要是一种方法来试图让狗停留在“为什么我们没有7.1这样的Nexus设备然而?”欢迎您不同意并考虑将API Level 25“尚未烘焙”,但您需要针对您认为“尚未烘焙”的方式提出自己的启发式方法。

在2014年的L Developer Preview之前,对于大多数Android版本来说,如果SDK发布了,那是最终的。偶尔,它在操作系统可供用户使用后发货。

同样,我不想任何Android支持库的beta版本,即使lint告诉我有一个可用。

Lint不应该这样做;如果您有相反的证据,请提出问题。再次,“beta版本”将被指定为这样。因此,例如,支持库的25.0.0版本不是测试版。如果你想考虑25.0.0为beta版本,不管出于何种原因,欢迎你这样做,但是你需要为你的beta版本提供你自己的启发式。

如何确定在build.gradle中声明的指定版本如下所示?

对于compileSdkVersion,将其设置为任何你感觉稳定的。现在,这可能是24.这可能是25.

对于targetSdkVersion,将其设置为适合您的应用程序的任何内容。该值为,具体为设计为而不是严格遵循compileSdkVersion,例如,当您有现有的代码库并需要时间将代码调整为某种更新的行为时。

对于支持库版本,主版本应该与您的compileSdkVersion匹配。次要/补丁级别应该是该主要版本的最新版本。

同样,Android Studio中的代码分析警告你,如果你有25.0.0之前支持库的依赖,但没有提到25预览

这是因为25不能预览。一旦你设置你的compileSdkVersion为25 —,你才可以使用它,否则—,但在所有其他方面,它是最终的,因为任何其他支持库更新没有明确标记为alpha, beta,RC等

搜索新闻网站并不理想,因为您需要手动筛选更新和过时的文章,特别是像7.1.1这样的发布版本。

Android OS版本在the Android Developer Blog上公布。例如,here is the announcement about Android 7.0 starting to ship to devices

+0

[预览时间线和更新](https://developer.android.com/preview/overview.html #timeline)部分说:“我们正在交付开发每预览1作为Beta版本发布“,并在12月份发布最终版本。对于没有完全烘焙的启发式,这是一个非常明显的启发式,尽管它可能足够接近:“一般来说,构建适合开发人员和早期使用者的日常使用”。我的个人经验并不好:包管理者甚至不包括源代码。我宁愿坚持完全稳定的版本,而新版本稳定。 –

+0

@EdwardBrey:“这是一个非常明确的未启发式启发式” - 恕我直言,指的是Nexus设备上的操作系统状态,而不是SDK的状态。 “一般来说,构建适合开发人员和早期使用者的日常使用” - 术语“构建”是指操作系统映像,而不是SDK。 “软件包管理员甚至不包括源代码” - 这并不奇怪,因为这经常滞后。 – CommonsWare

+1

感谢您澄清OS/SDK版本状态的区别。看起来lint提示升级到预发布代码的问题已得到解决,而剩下的问题就是与分发滞后相关的问题。为此我创建了一个[问题](https://code.google.com/p/android/issues/detail?id=226469)。 –

0

这是最好的过程中,我已经能够找到:

  1. 使用从SDK管理器的最新版本没有被标记为预览具有所有包(图像,源代码等)对你很重要。使用此版本compileSdkVersiontargetSdkVersion,除非您需要保留目标SDK版本,因为您的代码没有考虑到SDK中的重大更改。

  2. 使用最新的支持库版本发布在library revision history上,用于您正在使用的SDK版本。

它不像我想的那样自动化,但至少看起来我们可以信任SDK Manager中的预发行包被标记为这样。