Pho*_*nix 15 android gradle android-gradle-plugin android-r8 android-jetpack-compose
我在尝试编译应用程序的发布版本时遇到了 Githubs 操作运行程序的问题。我的应用程序有 8 种不同的风格,我们在 Play 商店上构建和提供,几个月前,我能够使用 Github Actions 在一个跑步者上同时构建多达 3 种风格。如果我们尝试一次执行超过 3 种风格,大约 15 分钟后,构建将失败并显示
FAILURE: Build failed with an exception.
* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
Gradle 日志除了指出当时正在运行哪个任务之外,并没有真正的帮助(minify r8)
当我继承这个代码库时,我发现我们将 jvm 参数中的最大堆大小设置为 6 GB,如果我完全降低该值,则在 r8 运行时最终会出现内存不足错误。对我来说,r8 会占用这么多内存,这似乎有点疯狂,而且最重要的是,github 托管的运行程序只有 7 GB 的 RAM 可供使用。因此,如果我们将 r8 在 gradle 守护进程中使用的内容结合起来,并且知道 kotlin 守护进程也在运行,我认为运行程序正在终止 gradle 守护进程的内存使用,或者它因内存不足而死亡。
自从我们添加 Jetpack Compose 库以来,我们现在无法一次构建超过一种风格的应用程序,而且我担心由于 r8 造成的内存占用而失去在 github 运行器上构建的能力。
这就是我当前的 gradle.properties 的样子:
org.gradle.jvmargs=-Xms1024m -Xmx6144m -XX:-UseGCOverheadLimit -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=512m -XX:+UseParallelGC org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.daemon=true org.gradle.caching=true android.useAndroidX=true android.debug.obsoleteApi=true kapt.incremental.apt=true
我尝试了一些方法来降低 r8 的工作负载:
通过所有这些更改,我发现 r8 步骤期间的总体占用空间实际上确实下降到了 5 GB 以上,但是在操作上运行时,如果我尝试一次执行多个风格,守护进程将仍然消失。
我花了很多时间试图在网上找到更多信息,我似乎能找到的只是人们说增加最大堆大小,但是当我的内存受到运行它的机器的限制时,这将无济于事。
我有点不知道可能是什么原因造成的,任何帮助都是值得赞赏的!
问题是 ubuntus 交换文件的默认大小。如果是 gitHub 操作,则只有 ~1GB ( sudo swapon --show)。当 ubuntu 内存不足(RAM + 交换文件)时,它将冻结。(在我启用 R8 后发生在我的本地计算机上)。我们可以通过增加交换文件作为第一步来解决这个问题:
- name: Increase swapfile
run: |
sudo swapoff -a
sudo fallocate -l 15G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |