You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MediaPipe生成人脸检测AAR文件时Bazel构建报错:缺少java/com/google/common/base包的BUILD文件

MediaPipe生成人脸检测AAR文件时Bazel构建报错:缺少java/com/google/common/base包的BUILD文件

看起来你在构建MediaPipe人脸检测AAR的时候碰到了Bazel的包解析错误,核心问题是找不到java/com/google/common/base目录下的BUILD文件。我来帮你梳理下问题原因和解决办法:

先整理下你的构建命令和关键错误信息:

执行的构建命令

bazel build -c opt --strip=ALWAYS --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a --legacy_whole_archive=0 --features=-legacy_whole_archive --copt=-fvisibility=hidden --copt=-ffunction-sections --copt=-fdata-sections --copt=-fstack-protector --copt=-Oz --copt=-fomit-frame-pointer --copt=-DABSL_MIN_LOG_LEVEL=2 --linkopt=-Wl,--gc-sections,--strip-all //mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar

核心错误日志

ERROR: no such package 'java/com/google/common/base': BUILD file not found in any of the following directories. Add a BUILD file to a directory to mark it as a package.
/home/mohit-gupta/mediapipe_venv/mediapipe/java/com/google/common/base
ERROR: /home/mohit-gupta/mediapipe_venv/mediapipe/mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example/BUILD:3:14: no such package 'java/com/google/common/base': BUILD file not found in any of the following directories. Add a BUILD file to a directory to mark it as a package.
/home/mohit-gupta/mediapipe_venv/mediapipe/java/com/google/common/base and referenced by '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection_android_lib'
ERROR: Analysis of target '//mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar' failed; build aborted: Analysis failed

问题原因分析

这个错误通常是以下几种情况导致的:

  1. 本地MediaPipe仓库代码不完整,缺失了Guava相关的Java目录和BUILD配置
  2. 依赖同步不彻底,MediaPipe需要的Java基础库没有被正确拉取
  3. Bazel缓存异常,导致依赖解析逻辑混乱

具体解决办法

1. 先修复本地仓库的完整性

首先确认你克隆的MediaPipe代码是完整的,没有因为克隆中断、手动删除或者git问题导致的文件缺失:

  • 进入MediaPipe根目录:
    cd /home/mohit-gupta/mediapipe_venv/mediapipe
    
  • 执行git状态检查:
    git status
    
  • 如果发现有缺失或者异常,重置仓库到远程完整状态(注意会覆盖本地修改):
    git fetch && git reset --hard origin/main
    
    (如果用的是其他分支,把main换成你当前使用的分支名)

2. 重新同步Android环境依赖

MediaPipe的Android依赖需要通过专门的脚本配置,可能之前的同步不完整:

  • 运行Android环境初始化脚本:
    bash setup_android.sh
    
  • 重新执行配置向导,确保Android相关选项正确:
    ./configure
    
    按照提示一步步确认,重点保证Android SDK、NDK的路径和版本配置正确。

3. 清理Bazel缓存后重新构建

Bazel的缓存有时候会残留异常状态,导致依赖解析错误:

  • 彻底清理Bazel缓存:
    bazel clean --expunge
    
  • 然后重新执行你原来的构建命令,让Bazel重新拉取所有依赖并分析构建。

4. 临时方案:手动添加BUILD文件(不推荐优先使用)

如果上面的方法都无效,你可以临时手动创建缺失的BUILD文件来绕过错误(注意这只是临时方案,可能引发后续依赖问题):

  • 先创建目录(如果不存在):
    mkdir -p java/com/google/common/base
    
  • 在该目录下创建BUILD文件,内容如下:
    java_library(
        name = "base",
        srcs = glob(["*.java"]),
        visibility = ["//visibility:public"],
    )
    

额外提示

从你的日志里看到多个依赖仓库(比如XNNPACK、com_google_protobuf)已经存在的警告,这说明之前的依赖拉取有残留,清理Bazel缓存后重新构建通常能解决这类冲突问题。另外,也要确认你的Bazel版本和MediaPipe官方文档要求的版本兼容,版本不匹配也可能引发各种奇怪的构建错误。

火山引擎 最新活动