【问题标题】:File not Found when compiling android resources (inconsistent across projects, consistent within projects)编译android资源时找不到文件(项目间不一致,项目内一致)
【发布时间】:2022-08-22 12:15:38
【问题描述】:

我有一个使用 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 cleanbazel syncbazel shutdown 调用持续存在。

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

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 成功之后,我点击了this bug

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

  • 糟糕,意识到我遗漏了一些重要信息: 系统:Windows 10 Bazel 5.2.0 版(通过 Bazelisk)

标签: android windows bazel


【解决方案1】:

今天我有时间回到这个问题,经过大量试验,包括尝试设置一个最小的示例以在使用bazel 提交错误时使用,我相信我找到了问题所在。它似乎与生成的文件名的长度有关。通过尝试maven_install 命令中使用的maven repo 名称的各种长度,我能够根据长度使构建失败或始终通过。任何 21 个字符或更短的名称都会成功构建,而任何超过 21 个字符的名称都会导致 file-not-found 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2013-10-25
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多