无法从../android-sdk/platform-tools/api/api-versions.xml加载api描述 java.io.IOException: 流已关闭

19

我将Android Studio升级到了v2020.3.1(北极狐),但是无法运行我的项目,因为我一直收到以下错误消息:

cannot load api descriptions from ../Android/android-sdk/platform-tools/api/api-versions.xml java.io.IOException: Stream closed

我尝试回退到v4.2.2,仍然遇到同样的错误。

注意:我使用的是Ubuntu 20.04。


1
这个错误对我来说是间歇性的 - 我只偶尔看到错误弹出。对我来说,它在命令行构建和在 Arctic Fox 和 pre-Arctic Fox 上的 Android Studio 构建中都会发生。 - rmtheis
@rmtheis 你找到任何解决办法了吗? - Pasha Shkaran
1
根据问题跟踪器显示,这个问题将在未来版本的Android Gradle插件中得到修复:https://issuetracker.google.com/issues/196847367。 - rmtheis
4个回答

14

3
这应该是被接受的答案!顺便提一下,根据这个问题https://issuetracker.google.com/issues/196847367?pli=1 的评论,它应该在AGP 7.1 canary 12中得到修复。 - Micer
1
感谢@jeprubio,对我帮助很大! - pauminku

6

我最近也遇到了这个问题,并进一步调查了这个问题,因为我无法降级platform-tools版本(因为它是在构建服务器上发生的,我不能控制platform-tools版本,它由Microsoft控制)。

以下是我的发现: 只有在大型Android项目中才会出现此问题,可能涉及多个模块。

问题的原因与SdkUtils类相关(请参见源文件)。 SdkUtils类对文件platform-tools/api/api-versions.xml有硬引用,但是使用了最新的platform-tools(31.0.3),该文件已不存在。

SdkUtils类中实现的回退方法是从资源中读取api-versions(通过执行getClass().getClassLoader().getResource("api-versions.xml").openStream();)。对于小型Android项目来说,这很好。但是,我注意到,在较大的Android项目中,存在多个模块/任务同时进行编译,其中一些流被关闭(因此会出现“ 流关闭”异常)。

我已向Google提出了问题,他们正在努力解决这个问题(请参见此处的issuetracker链接)。

在Google以适当的方式解决此问题之前,最简单的解决方法是降级您的platform-tools版本1个版本(如另一个答案所述)。

但是,如果您像我一样无法控制platform-tools版本(因为在我的情况下是由AzureDevops管理),我创建了一个临时解决方法。我向CI/CD流程添加了一个bash任务,其中我将api-versions.xml文件复制到platform-tools,因此它将使用该文件而不是资源。操作步骤如下:

steps:
  - bash: |
    echo Android sdk location: $ANDROID_SDK_ROOT
    mkdir $ANDROID_SDK_ROOT/platform-tools/api/
    cp $ANDROID_SDK_ROOT/platforms/android-30/data/api-versions.xml $ANDROID_SDK_ROOT/platform-tools/api/

我从 platforms/android-30/data/api-versions.xml 中复制,因为这是谷歌官方修复时将使用的文件(但也许不是硬编码的android-30,而是根据您的构建设置动态确定)。

4

3
"Downgrade" 的意思是“降级”。您的意思是取消选择最新版本,仅选择 31.0.2 吗?如果我理解有误请让我知道。 - mochadwi
1
有没有官方网站可以下载旧版本?如果您能提供,将不胜感激。 - Long Ranger
1
@mochadwi 我删除了sdk文件夹中的platform-tools文件夹,然后通过上面链接下载了下面的版本来替换之前删除的platform-tools文件夹。 - if_alan

1
我真的不确定是什么原因导致了这个问题,但清除缓存并重新启动AS对我来说解决了这个问题。
我的猜测是AS Arctic Fox依赖于JDK 11运行,也许IDE正在查找错误的jdk版本。

我在Android Studio中使用了JDK 11,并尝试了“无效缓存/重启”,但仍然没有变化。顺便说一下,这种情况只发生在一个相当重的项目中,在其他项目中尝试没有问题。 - if_alan
我遇到了同样的问题,尝试过清除缓存、重启AS并为项目选择JDK 11,但仍然存在该问题。这可能是JDK 11与旧版Gradle插件之间的问题吗?我的项目使用Gradle 6.1.1... - Marco Zanetti
6
同时,这种情况并非总是发生。建造、重建和再次重建最终会导致一次建造。我真的不知道正在发生什么... - Marco Zanetti
1
这很令人沮丧,看起来我必须降级AS。 - Alvin Dizon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接