5

我在 Android 项目代码库的 CircleCI 2.0 配置中有以下内容。

version: 2

jobs:
    build:

        environment:
            TERM: dumb
            JVM_OPTS: -Xmx4g -Xms2g -XX:MaxPermSize=2g

#     ###### Use these for other Docker Images, if need be ##########
#      ANDROID_SDK_ROOT: /usr/local/android-sdk-linux
#      SDK_MANAGER: $ANDROID_SDK_ROOT/tools/bin/sdkmanager

            GIT_COMMIT_DESC: git log --format=oneline -n 1 $CIRCLE_SHA1

            ANDROID_COMPILE_VERSION: 27
            ANDROID_TARGET_VERSION: 27
            ANDROID_MIN_VERSION: 21
            ANDROID_BUILD_VERSION: 28.0.2
            ANDROID_SUPPORT_VERSION: 27.1.1
            KOTLIN_VERSION: 1.2.70

        working_directory: ~/workSpace

        branches:
          only:
            - develop
            - release/<*>
            - feature/circle_ci_cd
          ignore:
            - bugfix/<*>
            - refactor/<*>

        docker:
          - image: circleci/android:api-$ANDROID_TARGET_VERSION-alpha

#    java:
#      version: oraclejdk8

#     ####### Other Docker Images, if need be ############
#    dependencies:
#      pre:
#        - $SDK_MANAGER --install "tools" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "platforms;android-$ANDROID_TARGET_VERSION" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "build-tools;$ANDROID_BUILD_VERSION" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "platform-tools" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "extras;android;m2repository" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "extras;google;m2repository" && yes | $SDK_MANAGER --licenses
#        - $SDK_MANAGER --install "extras;google;google_play_services" && yes | $SDK_MANAGER --licenses

        steps:
          - checkout

          - run:
              name: "Pull Submodules"
              command: |
                git submodule init
                git submodule sync
                git submodule update --remote

          - run:
              name: "Android SDK Properties"
              command: |
                sed -i "s/compileSdkVersion=*.*/compileSdkVersion=$ANDROID_COMPILE_VERSION/" gradle.properties
                sed -i "s/targetSdkVersion=*.*/targetSdkVersion=$ANDROID_TARGET_VERSION/"  gradle.properties
                sed -i "s/minSdkVersion=*.*/minSdkVersion=$ANDROID_MIN_VERSION/" gradle.properties
                sed -i "s/buildToolsVersion=*.*/buildToolsVersion=$ANDROID_BUILD_VERSION/" gradle.properties
                sed -i "s/supportVersion=*.*/supportVersion=$ANDROID_SUPPORT_VERSION/" gradle.properties
                sed -i "s/kotlinVersion=*.*/kotlinVersion=$KOTLIN_VERSION/" gradle.properties
                sed -i "s/versionCode=*.*/versionCode=${CIRCLE_BUILD_NUM:-1}/" gradle.properties

#      ######## Other Docker Images, if need be ###########
#      - run:
#          name: "Update Android"
#          command: $SDK_MANAGER --update && yes | $SDK_MANAGER --licenses

          - run:
              name: "Clean local.properties"
              command: rm -rf local.properties || true

          - run:
              name: Chmod permissions #if permission for Gradlew Dependencies fail, use this.
              command: chmod +x ./gradlew

          - restore_cache:
              key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}

          - run:
              name: Assemble
              command: ./gradlew clean assemble

          - save_cache:
              paths:
                - ${CIRCLE_WORKING_DIRECTORY}/.gradle
                - ${ANDROID_SDK_ROOT}
              key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
#      - store_artifacts:
#          path: app/build/reports
#          destination: reports
#      - store_test_results:
#          path: app/build/test-results
# See https://circleci.com/docs/2.0/deployment-integrations/ for deploy examples

gradle.properties 文件中几乎没有其他属性

org.gradle.jvmargs=-Xms2g -Xmx4g -XX:MaxPermSize=2g -XX:+HeapDumpOnOutOfMemoryError -XX:ReservedCodeCacheSize=2g -Dfile.encoding=UTF-8
org.gradle.configureondemand=false
org.gradle.caching=true
org.gradle.daemon=false
org.gradle.parallel=false
kotlin.incremental=false
kotlin.compiler.execution.strategy=in-process
android.enableBuildCache=true
android.enableR8=true

Gradle 包装器版本如下。

https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

Gradle Android 插件。

'com.android.tools.build:gradle:3.3.0-alpha10'

以下是构建变体配置。

flavorDimensions "product", "store"

productFlavors {
    free { dimension "product" }
    paid { dimension "product" }
    google { dimension "store" }
    amazon { dimension "store" }
}

开发机器是 MacOS High Sierra:10.13.6,3.5 GHz Intel Core i5 CPU,32 GB 2400 MHz DDR4 RAM。

这是正在发生的事情。

根据给定的风味维度,构建变体的顺序是按时间顺序排列的,因此以下八个是由 gradle 按确切顺序创建的。

  • 免费亚马逊调试
  • 免费亚马逊发布
  • 免费谷歌调试
  • 免费谷歌发布
  • 付费亚马逊调试
  • 付费亚马逊发布
  • 付费谷歌调试
  • 付费谷歌发布

这些构建变体中的每一个都有一个任务依赖列表。基于任务依赖性,这就是正在发生的事情。

  • kaptFreeAmazonDebugKotlin 执行没有错误。
  • kaptFreeAmazonReleaseKotlin 失败并显示以下堆栈跟踪,但不会突然终止构建。

使用 Kotlin compile daemon 编译不成功 java.rmi.UnmarshalException: Error unmarshaling return header; 嵌套异常是:在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) 在 java.rmi.server 的 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:236) 的 java.io.EOFException。 RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) at com.sun.proxy.$Proxy106.compile(Unknown Source) at org.jetbrains.kotlin.compilerRunner .GradleCompilerRunner.nonIncrementalCompilationWithDaemon(GradleKotlinCompilerRunner.kt:256) 在 org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner。concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java: 55) 在 java.lang.Thread.run(Thread.java:748) 引起:java.io.EOFException 在 java.io.DataInputStream.readByte(DataInputStream.java:267) 在 sun.rmi.transport.StreamRemoteCall.executeCall (StreamRemoteCall.java:222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 处的 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 处的 ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在 java.lang.Thread.run(Thread.java:748) 引起:java.io.EOFException 在 java.io.DataInputStream.readByte(DataInputStream.java:267) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall .java:222) ... 65 更多 编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 的 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 的 ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)在 java.lang.Thread.run(Thread.java:748) 引起:java.io.EOFException 在 java.io.DataInputStream.readByte(DataInputStream.java:267) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall .java:222) ... 65 更多 编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java .lang.Thread.run(Thread.java:748) 引起:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java :222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java .lang.Thread.run(Thread.java:748) 引起:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java :222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748)原因:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多无法清除 jar 缓存编译后,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748)原因:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多无法清除 jar 缓存编译后,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748) 由:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java: 267) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException:连接拒绝主机:127.0 .0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:748) 由:java.io.EOFException at java.io.DataInputStream.readByte(DataInputStream.java: 267) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException:连接拒绝主机:127.0 .0.1; 嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException:连接拒绝主机:127.0.0.1;嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。readByte(DataInputStream.java:267) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222) ... 65 更多编译后无法清除 jar 缓存,可能守护进程已经关闭:java.rmi.ConnectException:连接拒绝主机:127.0.0.1;嵌套异常是:java.net.ConnectException:连接被拒绝(连接被拒绝)无法连接到 kotlin 守护进程。使用后备策略。

  • kaptPaidAmazonDebugKotlin 与上述完全相同的堆栈跟踪失败,并且还突然终止了 gradle 构建。

我已经尝试了我能想到的 gradle 选项和 java 选项和 docker 选项的所有可能组合,我可以尝试在 Internet 上找到,但没有任何帮助。

这些故障仅发生在 Cloud 上的 CircleCI 2.0 或具有给定 Docker-image 的 CircleCI CLI 中。本地构建的 gradle 是稳定的。

任何指向解决方案的指针将不胜感激。

4

2 回答 2

1

在审查时,有一些可能的原因:

  • 你用错了buildToolsVersion,甚至可以在build.gradle-中省略,以便使用最新版本匹配的API级别27

  • 使用com.android.tools.build:gradle:3.3.0-alpha10是有问题的。更好地使用稳定版3,1,4;偶数版3.2.0目前仍处于测试阶段

编译后无法清除jar缓存

^ 这几乎暗示了文件系统冲突(因为下一个任务已经访问它)。

检查build目录 - 并productFlavors相应地重新定义,以解决问题。

于 2018-09-19T19:16:15.697 回答
0
android {
    kapt {
        useBuildCache true
    }

    dexOptions {
        preDexLibraries true
        jumboMode false
    }
}
于 2018-11-30T15:16:55.707 回答