19

在我将 android studio 更新到 v2020.3.1 (Arctic Fox) 之后。我无法运行我的项目,因为我总是收到此错误消息。

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

4

4 回答 4

10

我复制了这个片段的文件内容:

https://gitlab.com/-/snippets/2164806

platform-tools它抱怨它无法加载的目录中/api/api-versions.xml,错误不再出现。

无需降级平台工具。

于 2021-08-20T14:15:59.767 回答
6

我最近也遇到了这个问题,我进一步调查了这个问题,因为我无法降级平台工具版本(因为它发生在构建服务器上,我不控制平台工具版本,它由微软控制)。

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

问题的原因与 SdkUtils 类有关(请参阅源文件)。SdkUtils 类对文件有硬引用platform-tools/api/api-versions.xml,但使用最新的平台工具 (31.0.3),该文件不再存在。

在 SdkUtils 类中实现的回退是它将从资源中读取 api 版本(通过 do getClass().getClassLoader().getResource("api-versions.xml").openStream();)。对于小型 Android 项目,这很好。但我注意到,对于较大的 Android 项目,并行构建多个模块/任务,其中一些流会关闭(因此出现 Stream Closed 异常)。

我向 google 提出了一个问题,他们正在尝试修复它(请参阅此处的 issuetracker 链接)。

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

但是,如果您像我一样不控制平台工具版本(因为在我的情况下它由 AzureDevops 管理),我创建了一个临时解决方法。我在 CI/CD 管道中添加了一个 bash 任务,我将 api-versions.xml 文件复制到平台工具,因此它将使用该文件而不是资源。它看起来像这样:

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,而是根据您的构建设置动态地)。

于 2021-08-18T12:11:47.787 回答
3

我找到了解决办法!原来,我只需要将platform-toolsSDK 文件夹中的降级到 v31.0.2。

我们可以在https://androidsdkmanager.azurewebsites.net/Platformtools上下载它。

于 2021-08-05T03:35:01.690 回答
1

我真的不确定是什么导致了这个问题,但是使缓存无效并重新启动 AS 已经为我解决了这个问题。

我的猜测是 AS Arctic Fox 依赖 JDK 11 运行,也许 IDE 正在寻找错误的 jdk 版本

于 2021-08-03T12:24:06.827 回答