在我将 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
在我将 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
我复制了这个片段的文件内容:
https://gitlab.com/-/snippets/2164806
在platform-tools
它抱怨它无法加载的目录中/api/api-versions.xml
,错误不再出现。
无需降级平台工具。
我最近也遇到了这个问题,我进一步调查了这个问题,因为我无法降级平台工具版本(因为它发生在构建服务器上,我不控制平台工具版本,它由微软控制)。
以下是我的发现: 这个问题只出现在大型 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,而是根据您的构建设置动态地)。
我找到了解决办法!原来,我只需要将platform-tools
SDK 文件夹中的降级到 v31.0.2。
我们可以在https://androidsdkmanager.azurewebsites.net/Platformtools上下载它。
我真的不确定是什么导致了这个问题,但是使缓存无效并重新启动 AS 已经为我解决了这个问题。
我的猜测是 AS Arctic Fox 依赖 JDK 11 运行,也许 IDE 正在寻找错误的 jdk 版本