gpt4 book ai didi

java - 在没有 Android Studio 的情况下使用 gradle 构建 Android multidex 应用程序(在构建服务器上)

转载 作者:行者123 更新时间:2023-12-01 10:17:10 26 4
gpt4 key购买 nike

我正在设置运行 TeamCity 的 CI 服务器。

服务器运行的是openjdk8,我使用的是构建工具23.0.2

我有一个 multidex Android 应用程序,我可以使用 assembleMyFlavorRelease 在本地构建它。同样的构建在 app:transformClassesWithDexForMyFlavorRelease

上的 TeamCity 代理上失败

堆栈跟踪显示 java 以 1 退出,尽管我似乎找不到原因

[Gradle failure report] Execution failed for task ':app:transformClassesWithDexForMyFlavorRelease'.
[Gradle failure report] >
com.android.build.api.transform.TransformException:
com.android.ide.common.process.ProcessException:
java.util.concurrent.ExecutionException:
com.android.ide.common.process.ProcessException:
org.gradle.process.internal.ExecException:
Process 'command '/usr/lib/jvm/java-8-openjdk-amd64/bin/java'' finished with non-zero exit value 1

Exception is:
[Gradle failure report] org.gradle.api.tasks.TaskExecutionException:
Execution failed for task ':app:transformClassesWithDexForMyFlavorRelease'.
....
Caused by:
java.lang.RuntimeException: com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-openjdk-amd64/bin/java'' finished with non-zero exit value 1
....
Caused by:
com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-openjdk-amd64/bin/java'' finished with non-zero exit value 1

我的 app.gradle 看起来像这样

productFlavors {

final def MIN_SDK = 19
final def TARGET_SDK = 23

myFlavor {
minSdkVersion MIN_SDK
targetSdkVersion TARGET_SDK
multiDexEnabled true
}

使用这些 dex 选项

dexOptions {
javaMaxHeapSize "4g"
preDexLibraries false
}

编译

compileSdkVersion 23
buildToolsVersion '23.0.2'

使用多重分包 1.0.1

dependencies {
compile 'com.android.support:multidex:1.0.1'
}

构建代理完成这两项工作

:app:collectMyFlavorReleaseMultiDexComponents
:app:transformClassesWithMultidexlistForMyFlavorRelease

失败之前

app:transformClassesWithDexForMyFlavorRelease

使用信息运行会在退出之前显示这一点

[org.gradle.launcher.daemon.client.DaemonClient] Received result Failure[value=org.gradle.initialization.ReportedException:
org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':app:transformClassesWithDexForMyFlavor'.]
from daemon DaemonInfo{pid=2200,
address=[a10b64d0-94c0-40e9-8b5d-b5a5bbb171c4 port:46291, addresses:[/0:0:0:0:0:0:0:1%lo, /127.0.0.1]], idle=false,
context=DefaultDaemonContext[uid=968a9ee5-e6d4-4cba-a2a5-ce768ecbfe44,
javaHome=/usr/lib/jvm/java-8-openjdk-amd64,
daemonRegistryDir=/root/.gradle/daemon,pid=2200,idleTimeout=120000,
daemonOpts=-XX:MaxPermSize=512m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx2048m,-Dfile.encoding=UTF-8,
-Duser.country=US,-Duser.language=en,-Duser.variant]

此时任何帮助或指导将不胜感激!

最佳答案

事实证明这是一个资源问题,我在 AWS AMI 上运行我的构建而没有交换,并且 dexer 的内存不足。我在只有 2g 内存的 AMI 上将 javaMaxHeapSize 设置为 4g 也没有帮助。

为了解决这个问题,我首先将 javaMaxHeapSize 减少到 2g

dexOptions {
javaMaxHeapSize "2g"
preDexLibraries false
}

2g 似乎足以进行 deshing 以避免在我的构建中抛出 java.lang.OutOfMemoryError: GC 开销限制超出。我的项目包含 Google Analytics 库,并且在使用默认 dex 堆大小构建时遇到问题。

在 AMI 方面,我创建了一个 2G 交换文件,我在 T2.Small 上运行的 ubuntu AMI 上运行构建。

在我的 AMI 上:

sudo fallocate -l 2G /swap
sudo mkswap /swap
sudo swapon /swap

为了在重新启动后保留,我将以下行添加到 /etc/fstab

/swap    none    swap    sw    0    0

此后,我的 T2 现在可以构建而不会遇到任何错误。

希望这对某人有帮助

关于java - 在没有 Android Studio 的情况下使用 gradle 构建 Android multidex 应用程序(在构建服务器上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35827139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com