编译android资源时找不到文件(项目间不一致,项目内一致)

问题描述 投票:0回答:2

我有一个使用 bazel 的项目,并包含一个演示 Android 应用程序来展示一些功能和小部件。我想将其拆分为新的演示/实验应用程序的基础,以尝试其他小部件组合。因此,我将演示应用程序包中的

WORKSPACE
文件和代码复制到新项目中(包名称已更改,但我修改了代码和
BUILD
文件以解决此问题)。原始项目构建得很好,但新项目始终失败并出现以下错误:

ERROR: D:/_bazel_out/s6wwoqrr/external/maven_android_everything/BUILD:568:11: Compiling Android resources for @maven_android_everything//:com
_google_android_material_material failed: (Exit 1): ResourceProcessorBusyBox.exe failed: error executing command bazel-out\x64_windows-opt-ex
ec-2B5CBBC6\bin\external\bazel_tools\src\tools\android\java\com\google\devtools\build\android\ResourceProcessorBusyBox.exe ... (remaining 1 a
rgument skipped)
Jul 29, 2022 3:04:29 PM java.util.stream.ForEachOps$ForEachOp$OfRef accept
SEVERE: Error during Compiling bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_goog
le_android_material_material\res\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml:
Command: external\androidsdk\build-tools\33.0.0\aapt2.exe\
        compile\
        -v\
        --legacy\
        -o\
        C:\Users\bdlei\AppData\Local\Temp\android_resources_tmp3839340977225638696\compiled\bazel-out\android-armeabi-v7a-fastbuild\bin\exter
nal\maven_android_everything\_aar\unzipped\resources\com_google_android_material_material\res\
        bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_google_android_material_mat
erial\res\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml
Output:
bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_google_android_material_material\re
s\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml: error: file not found.

Exception in thread "main" com.google.devtools.build.android.aapt2.ResourceCompiler$CompileError
        at com.google.devtools.build.android.aapt2.ResourceCompiler$CompileError.of(ResourceCompiler.java:111)
        at com.google.devtools.build.android.aapt2.ResourceCompiler$CompilingVisitor.getCompiledArtifacts(ResourceCompiler.java:431)
        at com.google.devtools.build.android.aapt2.ResourceCompiler.getCompiledArtifacts(ResourceCompiler.java:465)
        at com.google.devtools.build.android.UnvalidatedAndroidData.compile(UnvalidatedAndroidData.java:103)
        at com.google.devtools.build.android.CompileLibraryResourcesAction.main(CompileLibraryResourcesAction.java:143)
        at com.google.devtools.build.android.ResourceProcessorBusyBox$Tool$6.call(ResourceProcessorBusyBox.java:99)
        at com.google.devtools.build.android.ResourceProcessorBusyBox.processRequest(ResourceProcessorBusyBox.java:234)
        at com.google.devtools.build.android.ResourceProcessorBusyBox.main(ResourceProcessorBusyBox.java:177)
        Suppressed: java.lang.RuntimeException: Error during Compiling bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_eve
rything\_aar\unzipped\resources\com_google_android_material_material\res\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml:    
Command: external\androidsdk\build-tools\33.0.0\aapt2.exe\
        compile\
        -v\
        --legacy\
        -o\
        C:\Users\bdlei\AppData\Local\Temp\android_resources_tmp3839340977225638696\compiled\bazel-out\android-armeabi-v7a-fastbuild\bin\exter
nal\maven_android_everything\_aar\unzipped\resources\com_google_android_material_material\res\
        bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_google_android_material_mat
erial\res\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml
Output:
bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_google_android_material_material\re
s\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml: error: file not found.

                at com.google.devtools.build.android.CommandHelper.execute(CommandHelper.java:42)
                at com.google.devtools.build.android.AaptCommandBuilder.execute(AaptCommandBuilder.java:297)
                at com.google.devtools.build.android.aapt2.ResourceCompiler$CompileTask.compile(ResourceCompiler.java:234)
                at com.google.devtools.build.android.aapt2.ResourceCompiler$CompileTask.call(ResourceCompiler.java:178)
                at com.google.devtools.build.android.aapt2.ResourceCompiler$CompileTask.call(ResourceCompiler.java:125)
                at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListe
nableFutureTask.java:125)
                at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)
                at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
                at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                at java.base/java.lang.Thread.run(Thread.java:829)
INFO: Elapsed time: 335.194s, Critical Path: 145.75s
INFO: 1568 processes: 74 internal, 1308 local, 186 worker.
FAILED: Build did NOT complete successfully

引用的文件:我的项目的

bazel-out\android-armeabi-v7a-fastbuild\bin\external\maven_android_everything\_aar\unzipped\resources\com_google_android_material_mat erial\res\animator\mtrl_extended_fab_change_size_collapse_motion_spec.xml
目录下bazel-out
确实存在
,但是构建失败后,临时目录
C:\Users\bdlei\AppData\Local\Temp\android_resources_tmp3839340977225638696
不存在。上次我尝试构建时,我有一个浏览器窗口打开到我的
AppData\Local\Temp
目录,并且在构建过程中许多这样的
android_resources_temp...
来来去去(这是我所期望的)。我在再次尝试构建之前删除了较旧的版本,虽然我无法跟踪错误中指定的版本是否曾经存在,但后来它不存在(构建失败后留下了其中一个)。

行为是一致的:原始项目始终成功,而分支项目失败。通过

bazel clean
bazel sync
bazel shutdown
调用,这种情况仍然存在。

这两个项目都通过调用第三个“依赖项”项目来依赖于 android,该项目创建一个 Maven 存储库并从中构建一个存储库:

def android():
    if 'maven_android_everything' not in native.existing_rules():
        maven_install(
            name = "maven_android_everything",
            artifacts = [
                "androidx.activity:activity:1.2.3", # using 1.4.0 causes indexing issues in dex without force-jumbo, even without dagger-views.
                "androidx.appcompat:appcompat:1.3.1",
                "androidx.appcompat:appcompat-resources:1.3.1",
                "androidx.constraintlayout:constraintlayout:2.1.1",
                "androidx.core:core:1.7.0",
                "androidx.fragment:fragment:1.3.6",
                "androidx.lifecycle:lifecycle-viewmodel:2.3.1",
                "androidx.viewpager2:viewpager2:1.0.0",
                "androidx.recyclerview:recyclerview:1.0.0",
                "androidx.tracing:tracing:1.0.0",
                "com.google.android.material:material:1.4.0",
            ],
            excluded_artifacts = [
                maven.exclusion(
                    group = "com.google.guava",
                    artifact = "guava",
                ),
            ],
            repositories = [
                "https://maven.google.com",
                "https://repo1.maven.org/maven2/",
            ],
        )

        new_simple_repo( # Simple custom repo rule to make an @android repo for use elsewhere
            name = "android",
            build_file_content = """
package(default_visibility = ["//visibility:public"])

android_library(
    name = "android",
    exports = [
        "@guava//:concurrent",
        "@maven_android_everything//:androidx_activity_activity",
        "@maven_android_everything//:androidx_appcompat_appcompat",
        "@maven_android_everything//:androidx_appcompat_appcompat_resources",
        "@maven_android_everything//:androidx_constraintlayout_constraintlayout",
        "@maven_android_everything//:androidx_core_core",
        "@maven_android_everything//:androidx_fragment_fragment",
        "@maven_android_everything//:androidx_lifecycle_lifecycle_viewmodel",
        "@maven_android_everything//:androidx_viewpager2_viewpager2",
        "@maven_android_everything//:androidx_recyclerview_recyclerview",
        "@maven_android_everything//:com_google_android_material_material",
    ],
)
""")

我尝试过更改版本以查看是否可能有帮助,但是在艰难地解决依赖冲突并最终获得

bazel sync
成功后,我遇到了 这个错误

我正在尝试削减我的“游乐场”项目,看看是否可以隔离任何内容,但即使删除对原始项目的依赖也无济于事。

android windows bazel
2个回答
0
投票

今天我花了一些时间回到这个问题,经过多次实验,包括尝试设置一个最小的示例以在使用

bazel
提交错误时使用,我相信我找到了问题。它似乎与结果文件名的长度有关。通过尝试
maven_install
命令中使用的 Maven 存储库名称的各种长度,我能够根据长度使构建一致失败或通过。任何 21 个字符或更短的名称都会成功构建,而任何超过 21 个字符的名称将导致文件未找到错误。


0
投票

@本·莱特纳 我在 android test-dpc google 项目的 Bazel 构建步骤中遇到了同样的错误。我使用的是 Windows 10 和 Android Studio。 控制台错误输出

你能帮我解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.