You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake构建Flutter Android插件报错:URL条目含无效路径

问题:CMake构建Flutter Android插件时下载Zip包报错 "At least one entry of URL is a path (invalid in a list)"

问题详情

为自研Flutter插件配置CMake时,编写了从GitHub仓库下载Zip包的代码,Windows平台构建正常,但Android平台构建失败,报错:At least one entry of URL is a path (invalid in a list)。

相关CMake代码片段

# Download the zipped folder of dart-sdk-api from the dependencies repo
set(dart_sdk_api_zip_url "https://github.com/Haidar0096/image_magick_ffi_deps/raw/master/dart_sdk_api.zip")
message(STATUS "Downloading dart-sdk-api from ${dart_sdk_api_zip_url}")
FetchContent_Declare(
        dart_sdk_api
        URL ${dart_sdk_api_zip_url}
        DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)
FetchContent_MakeAvailable(dart_sdk_api)

# Include the include folder of dart_sdk_api from the downloaded zip
include_directories(${dart_sdk_api_SOURCE_DIR}/include)

# Create a target from the sources of the downloaded zip and link it to the executable
file(GLOB_RECURSE DART_SDK_API_SOURCES "${dart_sdk_api_SOURCE_DIR}/src/*.c")
add_library(dart_sdk_api STATIC ${DART_SDK_API_SOURCES})
target_link_libraries(image_magick_ffi dart_sdk_api)

Android构建错误日志

[        ] Successfully started process 'command 'C:\Users\haidar\AppData\Local\Android\Sdk\cmake\3.18.1\bin\cmake.exe''
[        ] C/C++: debug|arm64-v8a :CMake Error at C:/Users/haidar/AppData/Local/Android/Sdk/cmake/3.18.1/share/cmake-3.18/Modules/ExternalProject.cmake:2480 (message):
[        ] C/C++: debug|arm64-v8a :  At least one entry of URL is a path (invalid in a list)
[        ] C/C++: debug|arm64-v8a :Call Stack (most recent call first):
[        ] C/C++: debug|arm64-v8a :  C:/Users/haidar/AppData/Local/Android/Sdk/cmake/3.18.1/share/cmake-3.18/Modules/ExternalProject.cmake:3228 (_ep_add_download_command)
[        ] C/C++: debug|arm64-v8a :  CMakeLists.txt:13 (ExternalProject_Add)
[        ] C/C++: debug|arm64-v8a :-- Configuring incomplete, errors occurred!
[        ] C/C++: debug|arm64-v8a :See also "D:/dev_haidar/flutter/image_magick_ffi/android/.cxx/Debug/42552b6e/arm64-v8a/_deps/dart_sdk_api-subbuild/CMakeFiles/CMakeOutput.log".

错误原因

报错源于Android SDK自带的CMake版本(3.18.1)过旧,在Android交叉编译场景下,旧版本CMake对FetchContent_Declare的URL参数解析存在缺陷,会误将远程URL识别为本地路径,从而触发该错误。

解决方法

方法1:升级Android SDK中的CMake版本

打开Android Studio,进入SDK Manager -> SDK Tools,找到CMake选项,选择更新到3.21及以上版本(如3.22.1),重新构建项目即可。新版本CMake优化了FetchContent的URL处理逻辑,能正确识别远程资源。

方法2:添加URL_HASH参数增强兼容性

在FetchContent_Declare中加入URL_HASH参数,指定下载文件的SHA256哈希值,帮助旧版本CMake明确这是远程资源。示例代码:

FetchContent_Declare(
        dart_sdk_api
        URL ${dart_sdk_api_zip_url}
        URL_SHA256 替换为dart_sdk_api.zip的SHA256哈希值
        DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)

可通过以下命令获取哈希值:

  • Windows:certutil -hashfile dart_sdk_api.zip SHA256
  • Linux/macOS:shasum -a 256 dart_sdk_api.zip

方法3:改用ExternalProject_Add手动配置(兼容旧CMake)

若无法升级CMake,可直接使用ExternalProject_Add替代FetchContent,手动配置下载逻辑:

include(ExternalProject)
ExternalProject_Add(
        dart_sdk_api
        URL ${dart_sdk_api_zip_url}
        DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps
        SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/dart_sdk_api-src
        CONFIGURE_COMMAND ""
        BUILD_COMMAND ""
        INSTALL_COMMAND ""
        DOWNLOAD_EXTRACT_TIMESTAMP TRUE
)

# 确保依赖顺序
add_dependencies(image_magick_ffi dart_sdk_api)

# 配置头文件和源码
include_directories(${CMAKE_CURRENT_BINARY_DIR}/_deps/dart_sdk_api-src/include)
file(GLOB_RECURSE DART_SDK_API_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/_deps/dart_sdk_api-src/src/*.c")

# 构建静态库并链接
add_library(dart_sdk_api STATIC ${DART_SDK_API_SOURCES})
add_dependencies(dart_sdk_api dart_sdk_api)
target_link_libraries(image_magick_ffi dart_sdk_api)

内容的提问来源于stack exchange,提问作者Haidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:20:20