Android gradle 在 ADO 上的 ubuntu 代理上构建失败但在 Windows 上编译,macos
Android gradle build fails on ubuntu agents on ADO but compiles on Windows, macos
这几天我一直在摸不着头脑。
我在 java 11 中使用 gradle 任务构建了一个 azure-pipeline yaml,它在 macos MS 托管代理上 运行 并且构建完美,但是为了性能和成本我们要切换到 ubuntu 代理的原因。切换构建失败并出现以下错误时:
> Task :app:compileStagingDebugKotlin FAILED
e: /home/vsts/work/1/s/app/src/main/java/org/xxx/xxxxx/profile/contactInfo/xxxxFragment.kt: (305, 59): Unresolved reference: xxxxxxFragmentMenu
xxxxFragmentmenu 是对导航菜单的引用 (androidx.navigation)(抱歉我不是 android 开发人员)。
问题是,如果我使用 windows 代理和 macos 代理,它就可以正常工作。我能看到的 MS 托管代理功能之间唯一显着的区别是 ubuntu 上的 jdk 版本比 v11
版本稍微落后一点
- ubuntu:11.0.14.1+1(默认)Eclipse Temurin JAVA_HOME_11_X64
- macos & windows 2019 : 11.0.14+101 Eclipse Temurin JAVA_HOME_11_X64
我还在 ubuntu 20.0.4 上创建了一个虚拟机,安装了 android studio,并且能够成功编译变体 AssembleStagingDebug。
这个变体确实正在 Windows 和 MacOs 上编译,下面是一个用 macos 成功编译的例子。
> Task :app:compileStagingDebugKotlin
w: Flag is not supported by this version of the compiler: -Xallow-jvm-ir-dependencies
w: ATTENTION!
This build uses unsafe internal compiler arguments:
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (196, 25): Unchecked cast: Any? to List<TrustCategory>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (265, 25): Unchecked cast: Any? to List<TrustDocumentInfo>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (390, 25): Unchecked cast: Any? to List<TrustDocumentShared>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/proofOfIdentity/ProofOfIdentityViewModel.kt: (65, 25): Unchecked cast: Any? to List<TrustPvid>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/splash/FragmentSplash.kt: (67, 13): The expression is unused
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/LocaleUtil.kt: (22, 19): 'updateConfiguration(Configuration!, DisplayMetrics!): Unit' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (31, 34): Variable 'selection' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (32, 45): Variable 'selectionArgs' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (73, 60): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (220, 36): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (225, 20): Unsafe use of a nullable receiver of type String?
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (229, 20): Unsafe use of a nullable receiver of type String?
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (243, 17): Variable 'size' is never used
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (258, 28): Variable 'read' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (9, 24): 'CursorLoader' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (31, 52): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (34, 28): 'constructor CursorLoader(Context!, Uri!, Array<(out) String!>!, String!, Array<(out) String!>!, String!)' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (34, 28): 'CursorLoader' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (35, 35): 'loadInBackground(): Cursor!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (38, 84): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (69, 40): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (77, 44): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtilExts.kt: (54, 73): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtilExts.kt: (73, 71): Type mismatch: inferred type is String? but String was expected
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/URIPathHelper.kt: (27, 40): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
> Task :app:compileStagingDebugJavaWithJavac
为了尝试进一步调试并排除这是针对 gradle 任务的可能性,我还尝试通过调用 ./gradlew clean AssembleStagingDebug --scan
的 bash 脚本进行编译,该脚本有效在本地但不在 ubuntu 代理上。
android sdk 已安装并可用,我们使用的是 30.0.3,其他一切似乎都一样。
这是什么原因造成的?我们真的很想获得 Ubuntu 代理。提前致谢。
编辑:
我查看了导航图 xml 文件和 Azure DevOps ubuntu 代理中生成的文件,这与使用 macOs 时不同 未生成一个导航操作节点...
我还尝试通过使用与 Azure DevOps 上的 ubuntu 代理相同的 jdk 和 sdk 来最接近代理开发环境:
打开jdk 版本“11.0.14.1” 2022-02-08
OpenJDK 运行环境 Temurin-11.0.14.1+1 (build 11.0.14.1+1)
OpenJDK 64 位服务器 VM Temurin-11.0.14.1+1(构建 11.0.14.1+1,混合模式)
javac 11.0.14.1
但仍然无法在本地重现相同的行为。
现在有人知道如何解决这个问题吗?
编辑 2:
我发现了问题,这是由于具有不同定义的重复片段(相同 ID)的问题。在 Windows 和 Ubuntu 上,与 macOs 相反,生成的文件似乎没有以相同的顺序处理,导致不包含某些操作的覆盖文件。我们进行了临时修复,为共享相同 ID 的所有片段包含相同的定义。现在它适用于所有平台。
我发现了问题,这是由于具有不同定义的重复片段(相同 ID)的问题。在 Windows 和 Ubuntu 上,与 macOs 相反,生成的文件似乎没有以相同的顺序处理,导致不包含某些操作的覆盖文件。我们进行了临时修复,为共享相同 ID 的所有片段包含相同的定义。现在它适用于所有平台。
这几天我一直在摸不着头脑。
我在 java 11 中使用 gradle 任务构建了一个 azure-pipeline yaml,它在 macos MS 托管代理上 运行 并且构建完美,但是为了性能和成本我们要切换到 ubuntu 代理的原因。切换构建失败并出现以下错误时:
> Task :app:compileStagingDebugKotlin FAILED
e: /home/vsts/work/1/s/app/src/main/java/org/xxx/xxxxx/profile/contactInfo/xxxxFragment.kt: (305, 59): Unresolved reference: xxxxxxFragmentMenu
xxxxFragmentmenu 是对导航菜单的引用 (androidx.navigation)(抱歉我不是 android 开发人员)。
问题是,如果我使用 windows 代理和 macos 代理,它就可以正常工作。我能看到的 MS 托管代理功能之间唯一显着的区别是 ubuntu 上的 jdk 版本比 v11
版本稍微落后一点- ubuntu:11.0.14.1+1(默认)Eclipse Temurin JAVA_HOME_11_X64
- macos & windows 2019 : 11.0.14+101 Eclipse Temurin JAVA_HOME_11_X64
我还在 ubuntu 20.0.4 上创建了一个虚拟机,安装了 android studio,并且能够成功编译变体 AssembleStagingDebug。 这个变体确实正在 Windows 和 MacOs 上编译,下面是一个用 macos 成功编译的例子。
> Task :app:compileStagingDebugKotlin
w: Flag is not supported by this version of the compiler: -Xallow-jvm-ir-dependencies
w: ATTENTION!
This build uses unsafe internal compiler arguments:
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (196, 25): Unchecked cast: Any? to List<TrustCategory>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (265, 25): Unchecked cast: Any? to List<TrustDocumentInfo>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/documentation/DocumentationViewModel.kt: (390, 25): Unchecked cast: Any? to List<TrustDocumentShared>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/profile/documents/proofOfIdentity/ProofOfIdentityViewModel.kt: (65, 25): Unchecked cast: Any? to List<TrustPvid>
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/splash/FragmentSplash.kt: (67, 13): The expression is unused
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/LocaleUtil.kt: (22, 19): 'updateConfiguration(Configuration!, DisplayMetrics!): Unit' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (31, 34): Variable 'selection' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (32, 45): Variable 'selectionArgs' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (73, 60): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (220, 36): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (225, 20): Unsafe use of a nullable receiver of type String?
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (229, 20): Unsafe use of a nullable receiver of type String?
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (243, 17): Variable 'size' is never used
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/UriUtils.kt: (258, 28): Variable 'read' initializer is redundant
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (9, 24): 'CursorLoader' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (31, 52): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (34, 28): 'constructor CursorLoader(Context!, Uri!, Array<(out) String!>!, String!, Array<(out) String!>!, String!)' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (34, 28): 'CursorLoader' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (35, 35): 'loadInBackground(): Cursor!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (38, 84): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (69, 40): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtil.kt: (77, 44): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtilExts.kt: (54, 73): 'DATA: String' is deprecated. Deprecated in Java
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/RealPathUtilExts.kt: (73, 71): Type mismatch: inferred type is String? but String was expected
w: /Users/runner/work/1/s/app/src/main/java/org/xxx/xxx/util/file/test/URIPathHelper.kt: (27, 40): 'getExternalStorageDirectory(): File!' is deprecated. Deprecated in Java
> Task :app:compileStagingDebugJavaWithJavac
为了尝试进一步调试并排除这是针对 gradle 任务的可能性,我还尝试通过调用 ./gradlew clean AssembleStagingDebug --scan
的 bash 脚本进行编译,该脚本有效在本地但不在 ubuntu 代理上。
android sdk 已安装并可用,我们使用的是 30.0.3,其他一切似乎都一样。
这是什么原因造成的?我们真的很想获得 Ubuntu 代理。提前致谢。
编辑:
我查看了导航图 xml 文件和 Azure DevOps ubuntu 代理中生成的文件,这与使用 macOs 时不同 未生成一个导航操作节点...
我还尝试通过使用与 Azure DevOps 上的 ubuntu 代理相同的 jdk 和 sdk 来最接近代理开发环境: 打开jdk 版本“11.0.14.1” 2022-02-08 OpenJDK 运行环境 Temurin-11.0.14.1+1 (build 11.0.14.1+1) OpenJDK 64 位服务器 VM Temurin-11.0.14.1+1(构建 11.0.14.1+1,混合模式) javac 11.0.14.1
但仍然无法在本地重现相同的行为。
现在有人知道如何解决这个问题吗?
编辑 2:
我发现了问题,这是由于具有不同定义的重复片段(相同 ID)的问题。在 Windows 和 Ubuntu 上,与 macOs 相反,生成的文件似乎没有以相同的顺序处理,导致不包含某些操作的覆盖文件。我们进行了临时修复,为共享相同 ID 的所有片段包含相同的定义。现在它适用于所有平台。
我发现了问题,这是由于具有不同定义的重复片段(相同 ID)的问题。在 Windows 和 Ubuntu 上,与 macOs 相反,生成的文件似乎没有以相同的顺序处理,导致不包含某些操作的覆盖文件。我们进行了临时修复,为共享相同 ID 的所有片段包含相同的定义。现在它适用于所有平台。