【问题标题】:How can I download an old version of the Android support library?如何下载旧版本的 Android 支持库?
【发布时间】:2015-07-10 04:47:06
【问题描述】:

我的目标是 Android 19(因为这是我的手机正在运行的)。我想添加一个带有按钮的通知;似乎正确的方法是使用 appcompat-v7.app.NotificationCompat。

但是,当我从 Android 支持存储库修订版 22.2(通过 build.gradle 依赖项)添加 appcompat-v7 时,它包含一个文件 app/build/intermediates/exploded-aar/com.android.support/appcompat-v7 /22.2.0/res/values-v21/values-v21.xml 无法编译,因为它假定目标是 21+。

我尝试删除该文件,但它会重新生成。

似乎没有办法从构建中排除文件。

因此,我需要获取旧版本的支持库或存储库,其中不包含 21 个内容。

我想我可以直接导入所有源代码(并省略 v21 的内容),而不是通过依赖项?我不清楚从哪里开始。 我可以使用 SDK 管理器来获取旧版本的 SDK,但它只提供最新版本的支持库。

【问题讨论】:

  • 嗯?始终以最新的稳定 API 和最新的支持库和最新的构建工具为目标...如果您使用来自 API > minSdk 的东西,您应该得到 lint 的警告...如果您没有,那么它应该在所有具有 API 的设备上运行lvl >= minSdk 没有问题
  • 添加你的 gradle 配置
  • 使用targetSdkVersioncompiledSdkVersion = 21 解决您的问题
  • 我不习惯依赖 Lint,但我已经开始更多地使用它,所以我尝试了碰撞 targetSdkVersion。但是,这仍然会产生相同的错误。
  • “我仍然对针对新 SDK 版本进行编译感到谨慎;每次我更改为新版本时,都会出现问题”——所有这些都是更改您编译的本地 JAR,因为解析类、方法、字段等。生成的 APK 中唯一的实际变化将来自其值发生变化的静态字段,而且这种情况不会经常发生(IOW,我无法说出它曾经有过的任何情况)。我还没有听说任何确认的“某些事情中断”的案例更改compileSdkVersion。如果你有具体的例子,我很想听听。

标签: android android-gradle-plugin android-support-library


【解决方案1】:

直接回答你的问题就是 gradle 上的那一行:

compile 'com.android.support:appcompat-v7:22.2.0'

最后一部分是你得到的版本。 22.2.0 在上面的例子中。

您可以在此链接上查看修订号: https://developer.android.com/tools/support-library/index.html#revisions

但是你对你的问题有一个根本错误的方法。您不必针对您拥有的设备定位 API。您可以轻松安全地定位最新的 API,使用最新的 AppCompat 功能和错误修复。

每当您尝试使用不是来自您的minimumApi 的功能时,Lint 都会给您一个警告,无论targetAPI 是什么

【讨论】:

  • 错了。如果您希望您的应用保持工作状态,则必须针对正确的 API。
  • @Laser 如果您阅读了他所有的 cmets,您会发现他只是一个糟糕的开发人员,没有真正了解幕后发生的事情,并且正在传播 FUD。是的,API 存在差异,但我的回答是简单地编译为最新的 API,而不是仅针对它进行编码。
【解决方案2】:

在您的 gradle 构建文件中将依赖项更改为 19 版本(库的版本应该与您正在编译的 sdk 匹配):

dependencies {
    compile 'com.android.support:appcompat-v7:19.1.+'
...
}

编辑:如果 v19 的支持库没有 NotificationCompat,那么除非您针对更高版本的 SDK 进行编译,否则您将无法使用它。您不能包含版本高于已编译 SDK 的支持库 - 这就是您遇到的问题。

在这种情况下更改:

android {
    compileSdkVersion 22
    ...
}

并将依赖项设置为 22 版本的 appcompat 支持库

【讨论】:

  • 有个小问题... v19.0.+/19.1.+ 不包含 app.NotificationCompat 类
  • @Selvin Ahh 如果是这种情况,那么如果针对 SDK 19,OP 将无法使用 NotificationCompat - 他必须针对相应库支持 NotificationCompat 的更高版本的 SDK。更新了答案。
  • 对。我使用支持库的原因是因为我想访问 API 21 中引入的功能,所以我当然需要针对该级别。
  • 已更新以反映重要的是 compileSdkVersion - 而不是目标(尽管如果您更改了目标版本,则必须根据定义调整编译版本)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2013-10-29
相关资源
最近更新 更多