android - 处理大原始文件时android studio aapt构建超时
问题描述
我尝试使用 android studio 4.2.1 在原始文件夹中包含一个大小为 1.6G 的文件。aapt 将在 10 分钟后超时。当然我们也可以把文件放到云端或者服务器上,然后在用户第一次使用的时候下载。Apple Xcode 可以轻松完成,没有任何问题。这就是 android studio 永远不会成为顶级 IDE 的原因:你不能只是把一堆开源工具放在一起,然后希望它们一起创造奇迹。你需要有人像 Xcode 一样照顾整体性能。Gradle 需要 5G 内存(org.gradle.jvmargs=-Xmx5000m),仍然无法理解 1.6G 文件。它继续逐步淘汰 gcc、ndk-build 等好东西,推出无用的功能、不同语法的 gui……,发明无用的新语言。llvm 真的给了他们那个愚蠢的选择。
AAPT2 aapt2-4.2.1-7147631-windows 守护进程#0 未能在超时内关闭 java.util.concurrent.TimeoutException:AAPT2 aapt2-4.2.1-7147631-windows 守护进程#0:未能在 30 秒内关闭。在 com.android.builder.internal.aapt.v2.Aapt2Daemon.shutDown(Aapt2Daemon.kt:171) 在 com.android.builder.internal.aapt.v2.Aapt2Daemon.shutDown(Aapt2Daemon.kt:171) 强制关闭.android.builder.internal.aapt.v2.Aapt2Daemon.handleError(Aapt2Daemon.kt:206) 在 com.android.builder.internal.aapt.v2.Aapt2Daemon.handleError$default(Aapt2Daemon.kt:191) 在 com.android .builder.internal.aapt.v2.Aapt2Daemon.link(Aapt2Daemon.kt:129) 在 com.android.builder.internal.aapt.v2.Aapt2DaemonManager$LeasedAaptDaemon.link(Aapt2DaemonManager.kt:176) 在 com.android.builder .internal.aapt.v2.Aapt2DaemonManager$leasingAapt2Daemon$1.link(Aapt2DaemonManager.kt:
任务:app:processDebugResources 失败
任务 ':app:processDebugResources' 执行失败。
执行 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction AAPT2 aapt2-4.2.1-7147631-windows 守护进程 #0:链接超时,试图停止守护进程时发生故障。这在正常情况下不应该发生,如果发生,请提出问题。
- 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。
解决方案
不要将 1.6 GB 的文件作为原始文件包含在内。首先,如果您这样做,您的应用程序可能无法运行,因为资源在启动时加载到内存中,并且您将超过单个应用程序的 RAM 限制。其次,这对于您的 APK 来说下载时间非常长。如果您绝对必须将 1.6 GB 的文件作为应用程序的一部分,那么它应该是扩展文件或下载文件,而不是应用程序本身的一部分。
如果您绝对必须将其作为 apk 本身的一部分 - 它不能是原始文件。它需要成为一种资产。
真的,如果你不明白为什么一个巨大的 RAW 文件是个坏主意,你不应该抱怨 XCode(很可能是我自 DOS 时代以来使用过的最糟糕的 IDE)与 Android Studio。您显然不了解该平台并且正在滥用它。您的应用程序使用的内存将超出其应有的千兆字节。
推荐阅读
- elasticsearch - 使用 Elastic 搜索不同的搜索网站
- javascript - 无法弄清楚正确编辑 JS 对象的算法
- android - 如何使用材质库使 FloatingActionButton 成为正方形?
- javascript - 如何从两个 iframe 中获取元素
- listview - SwiftUI 列表在删除后继续显示核心数据项
- reactjs - 如何在 React.js 中不使用 onSubmit 清除输入字段
- ios - 如何在从 iOS 上的 AWS S3 存储桶下载本地文件时访问它?
- haskell - 如何在 Haskell 中删除字符串中的最后一个字符(不使用 init)?
- pandas - 在 Pandas 中重命名我的数据框的列名
- python - 构建用户旅程 - 你如何“自我循环”加入?