Nur*_*izi 14 android android-studio android-studio-arctic-fox
在我将 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
jep*_*bio 14
我复制了此片段的文件内容:
https://gitlab.com/-/snippets/2164806
在platform-tools目录中它抱怨无法加载/api/api-versions.xml并且错误不再显示。
无需降级平台工具。
我最近也遇到了这个问题,并且我进一步调查了这个问题,因为我无法降级平台工具版本(因为它发生在构建服务器上,我不控制平台工具版本,它由 Microsoft 控制) )。
以下是我的发现: 这个问题只出现在大型 Android 项目中,可能涉及多个模块时。
问题的原因与类 SdkUtils 有关(请参阅源文件)。SdkUtils 类对该文件有硬引用platform-tools/api/api-versions.xml,但使用最新的平台工具 (31.0.3),该文件不再存在。
SdkUtils 类中实现的后备措施是,它将从资源中读取 api 版本(通过执行getClass().getClassLoader().getResource("api-versions.xml").openStream();)。对于小型 Android 项目来说这没问题。但我注意到,对于较大的 Android 项目,并行构建多个模块/任务,其中一些流会被关闭(因此出现 Stream Closed 异常)。
我向谷歌提出了一个问题,他们正在尝试修复它(请参阅此处的问题跟踪器链接)。
虽然 Google 正在以适当的方式解决此问题,但最简单的解决方案是降级您的 platform-tools 1 版本(如另一个答案中所述)。
但是,如果您像我一样不控制平台工具版本(因为在我的情况下它由 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/
Run Code Online (Sandbox Code Playgroud)
我从 复制platforms/android-30/data/api-versions.xml,因为这是他们也将在谷歌官方修复中使用的文件(但可能不是硬编码的 android-30,而是根据您的构建设置动态地进行)。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |