【问题标题】:Determining the latest stable Android SDK确定最新稳定的Android SDK
【发布时间】:2017-03-09 04:24:32
【问题描述】:

在 Google 发布其 Android SDK 更新时,使在 Android Studio 中开发的项目保持最新的可靠流程是什么?

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

具体来说,我如何确定从 SDK 管理器安装哪些包,以及如何确定在 build.gradle 中为如下声明指定哪些版本?

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

更新:有关更多背景信息,请参阅新的 Android Studio 问题 Lint prompts upgrade to partially distributed SDKs,由评论讨论提示。

【问题讨论】:

  • compileSdkVersion 设置为最高的生产 API 级别(目前为 24)。将targetSdkVersion 设置为对您的应用有意义的任何值(如果您准备好了,则设置为 24,否则设置为更低)。支持库的主要版本应与您的 compileSdkVersion 匹配,并使用其中最新的次要/补丁级别。
  • 我正在寻找一个独立于版本的过程,而不是仅针对今天的特定答案。例如,如何快速确定 API 级别 24 是当今最新的稳定版本?是否有发布此内容的规范网页?支持库有次要版本。如何确定他们最新的稳定版本?
  • “例如,如何快速确定 API 级别 24 是当今最新的稳定版本?” -- 因为 Android 7.0 已发布,并且 Android 7.0 是 API 级别 24(请参阅Build.VERSION_CODES)。 “是否有发布此内容的规范网页?” -- Android OS 版本被许多主要新闻媒体报道。 “如何确定他们最新的稳定版本?” -- 它是最大的数字,假设没有附加-alpha 或类似的后缀。
  • Google 不能可靠地标记他们的预发布包。例如,Android Studio SDK 管理器列出的 Android 7.1.1 没有 alpha 标签或其他指示它是not baked yet;你需要自己去寻找合适的网站。同样,如果您依赖 25.0.0 之前的支持库,Android Studio 的代码分析会警告您,但没有提及 25 是预览版。搜索新闻媒体也不理想,因为您需要手动筛选更新和过时的文章,尤其是像 7.1.1 这样的单点发布。

标签: android android-studio sdk versioning


【解决方案1】:

我使用这些链接来查找最新的。主要是安卓网站:

compileSdk & targetSdk:向下滚动到平台表。两者都等于最新平台版本的 API,即 27

supportLibVersion: 哪个是稳定版

gradle & plugin version: 一定要从这个页面升级 gradle & plugin

googlePlayServicesVersion: 滚动到表格和每一行的尾数是什么

buildToolsVersion: 显然你在 gradle 版本 3.0.0 之后不再需要声明构建工具,但以防万一你需要它

firebase:根据需要查找所有库

我通常在我的项目级别 build.gradle 中设置以下内容,并为其设置一个变量以在我的其他 build.gradle 中使用:

ext {
    compileSdkVersion   = xxxx
    targetSdkVersion    = xxxx
    supportLibVersion   = "xxxx"
    buildToolsVersion   = "xxxx"
    googlePlayServicesVersion = "xxxx"
}

如果您保留这些书签,您应该能够轻松找到每个的最新消息

【讨论】:

    【解决方案2】:

    这是我能找到的最好的流程:

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

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

    它不像我希望的那样自动化,但至少看起来我们可以相信 SDK 管理器中的预发布包被标记为这样。

    【讨论】:

      【解决方案3】:

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

      关于支持库,Alpha 版和 Beta 版都以工件版本的形式进行宣传。例如,ConstraintLayout 库目前是 -beta1, IIRC。

      关于Android SDK,过去三年的规则是,如果它被称为“开发者预览版”,它就不是你认为的稳定版本。如果它具有常规的 Android 版本号(例如 7.0),则它是一个稳定版本。

      您已经表达了对 Android 7.1 的担忧,这在一定程度上是之前规则的一个例外。恕我直言,谷歌把这件事搞砸了,大概是因为典型的高管白痴。实际上,API 级别 25 是最终版本,因为他们已经交付了搭载 Android 7.1 的设备(Pixel),并且源代码已在 AOSP 存储库中。因为他们描述的是the APIs as final,我也认为他们是最终的,并且很乐意推荐人们针对他们进行编译。它的“预览”方面更多的是其他硬件的可用性,这似乎主要是一种试图让狗远离“为什么我们没有 7.1 用于某某 Nexus 设备”的方式然而?”欢迎您不同意并将 API 级别 25 视为“尚未完成”,但您需要针对您认为“尚未完成”的内容提出自己的启发式方法。

      在 2014 年的 L 开发者预览版之前,对于大多数 Android 版本,如果 SDK 发布,它就是最终版本。有时,它会在操作系统可供用户使用后发货。

      同样,我不想要任何 Android 支持库的测试版,即使 lint 告诉我有可用的支持库。

      Lint 不应该这样做;如果您有相反的证据,请提出问题。同样,“测试版”将被指定为这样。因此,例如,支持库的 25.0.0 版本不是测试版。如果您希望将 25.0.0 视为测试版,无论出于何种原因,我们都欢迎您这样做,但是您将需要提出自己的启发式方法来判断什么是测试版,什么不是测试版。

      如何确定在 build.gradle 中为以下声明指定哪些版本?

      对于compileSdkVersion,将其设置为您认为稳定的任何值。现在,可能是 24。可能是 25。

      对于targetSdkVersion,将其设置为对您的应用有意义的任何值。此值专门设计为严格遵循compileSdkVersion,适用于您拥有现有代码库并且需要时间使代码适应某些新行为的情况。

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

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

      那是因为 25 不是预览版。只有在将compileSdkVersion 设置为 25 时才有意义使用它——否则你可能无法针对它进行编译——但在所有其他方面,它与任何其他未明确标记为的支持库更新一样是最终的alpha、beta、RC 等。

      搜索新闻媒体也不理想,因为您需要手动筛选更新和过时的文章,尤其是像 7.1.1 这样的单点发布。

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

      【讨论】:

      • preview timeline and updates 部分显示“我们正在提供开发者预览版 1 作为 Beta 质量版本”,最终版本将于 12 月发布。对于未完全烘焙,这是一个非常明确的启发式方法,尽管它可能足够接近:“通常,这些构建适合开发人员和早期采用者的日常使用”。我的个人经验不是很好:包管理器甚至不包含源代码。我宁愿在新版本稳定时坚持使用完全稳定的版本。
      • @EdwardBrey:“对于未完全烘焙,这是一个非常明确的启发式”——恕我直言,这是指 Nexus 设备上的操作系统状态,而不是 SDK 的状态。 “一般来说,这些构建适合开发人员和早期采用者的日常使用”——“构建”一词是指操作系统映像,而不是 SDK。 “包管理器甚至不包含源代码”——这并不奇怪,因为这通常会滞后。
      • 感谢您阐明 OS/SDK 发布状态的区别。看起来 lint 提示升级到预发布代码的问题已经解决,剩下的就是与滞后分发相关的问题。为此,我创建了一个issue
      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2021-10-23
      • 2023-01-28
      • 2017-04-10
      • 1970-01-01
      • 2020-03-28
      • 2013-03-20
      相关资源
      最近更新 更多