在gradle中构建本机共享库作为依赖项

在gradle中构建本机共享库作为依赖项,gradle,android-ndk,shared-libraries,Gradle,Android Ndk,Shared Libraries,我有一个Android Studio项目,它依赖于本地共享库。我创建了一个cmake文件来编译库,并在android项目中添加了一个到共享库的软链接(在src/main/jniLibs/armeabi中)。这样,在构建android项目时,共享库就包含在包中 以下是build.gradle的相关部分: android { ... externalNativeBuild { cmake { path "../cpp/CMakeLists.tx

我有一个Android Studio项目,它依赖于本地共享库。我创建了一个cmake文件来编译库,并在android项目中添加了一个到共享库的软链接(在
src/main/jniLibs/armeabi
中)。这样,在构建android项目时,共享库就包含在包中

以下是
build.gradle
的相关部分:

android {
    ...
    externalNativeBuild {
        cmake {
            path "../cpp/CMakeLists.txt"
        }
    }
}
问题是gradle试图在调用指令构建共享库之前打开它

Information:Gradle tasks [:app:assembleDebug]
Error:Could not list contents of 'app/src/main/jniLibs/armeabi/libfoo.so'. Couldn't follow symbolic link.
如何从项目内部调用cmake,同时将库包含在项目中

--

编辑

在cmake中,共享库是使用
ExternalProject\u Add
构建的。不幸的是,gradle没有看到这个目标,也没有看到导入的共享库作为目标。所以这不起作用:

add_library(libfoo SHARED IMPORTED GLOBAL)
add_dependencies(libfoo libactual)
我尝试使用gradle配置调用构建特定目标:

defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            targets "libfoo"
        }
    }
}
但gradle仍然看不到这一点,并在以下方面失败:

Unexpected native build target libfoo. Valid values are:
有效值基本上是一个空列表

目前,我通过根据库创建一个虚构的可执行文件来解决这个问题

add_executable(libfoo a.c)
add_dependencies(libfoo libactual)

你能解释一下符号链接的用途吗?共享库应该自动包含在APK中。@Michael Gradle无法知道共享库的名称,因为它是通过调用cmake文件中的
configure
make
构建的(通过外部项目)。如果您使用
ExternalProject\u Add
运行
配置
生成
,然后使用
Add\u库(…共享导入…
)并依赖于ExternalProject,则此操作无效?@Michael感谢您的回答。我更新了我的问题。如果导入共享库,gradle基本上不会将其视为目标。@RobertdeW不,我没有。