Java Android Studio中带有实验性Gradle插件的本机预建共享库

Java Android Studio中带有实验性Gradle插件的本机预建共享库,java,android,gradle,android-ndk,java-native-interface,Java,Android,Gradle,Android Ndk,Java Native Interface,我正在尝试将一个本地预构建的共享库添加到我在Android Studio中的项目中。我使用的是渐变实验:0.6.0-alpha5。但是,每当我尝试将预构建的共享库添加到我的应用程序模型时,都会出现以下错误: 错误:原因: org.gradle.api.internal.PolymorphicDomainObjectContainerConfigureDelegate 库被添加到应用程序模型中,其描述方式如下: 关键的一行是库“共享库”。如果我取消注释这一行,则没有错误 由于这不起作用,我也尝试使

我正在尝试将一个本地预构建的共享库添加到我在Android Studio中的项目中。我使用的是渐变实验:0.6.0-alpha5。但是,每当我尝试将预构建的共享库添加到我的应用程序模型时,都会出现以下错误:

错误:原因: org.gradle.api.internal.PolymorphicDomainObjectContainerConfigureDelegate

库被添加到应用程序模型中,其描述方式如下:

关键的一行是库“共享库”。如果我取消注释这一行,则没有错误

由于这不起作用,我也尝试使用来自的指南。他们使用不同的语法来添加本机共享库(我只是省略了标题,因为我没有一个包含所有标题的目录):

尽管如此,这并不奏效。Android Studio不会将我的共享库复制到apk文件。因此,我总是得到以下错误:

java.lang.UnsatifiedLinkError:dalvik.system.PathClassLoader[…]找不到“shared_lib.so”

谁能告诉我如何将本机预构建库包含到我的项目中?我正在使用buildToolsVersion='22.0.1'和compileSdkVersion=22作为构建参数。

这一个对我有用(0.6.0-beta6)


看起来他们只是忘了提到“binaries.withType”中的“YourLib{}”部分。你可以试试硬编码的路径到。所以,代替
${targetPlatform.getName()}
?是的,我已经试过了。Gradle肯定可以解决路径问题,因为如果我将路径更改为不存在的文件,就会出现错误。如果有办法解决我的问题,我还是会很高兴的。然而,我暂时解决了我的问题,不再使用预先构建的库。我用
cppfagas添加了所有必需的头文件。将(“-I${file(“../../../../../../projects/test/include”)}.toString()
srcDirs+=”/../../../projects/test/src/“
添加到jni。但最好还是能够使用预构建的库。您能使用
--stacktrace
运行并获取更多错误信息吗?您能解决这个问题吗?(除了临时解决方案)我在尝试链接我的网站时遇到了同样的问题。你看过谷歌的NDK样本了吗?谢谢!这在gradle实验:0.6.0上对我有效。我将把它标记为一般问题的解决方案。@Zhur的语法是正确的。但是,我认为不满意的链接错误是一个更复杂的错误,它与Gradle文件无关。@budderick它有:由于不正确的Gradle文件,共享库没有进入APK。因此,在运行时,链接器无法找到该库并抛出异常。是的,在这种情况下,您的解决方案是正确的。我只是想说问题可能还更深。我的一个项目使用了你的解决方案,另一个没有。我认为这在最新的gradle实验设置中不起作用。
repositories {
    prebuilt(PrebuiltLibraries) {
        binaries.withType(SharedLibraryBinary) {
            sharedLibraryFile = file("/path_to_libs/${targetPlatform.getName()}/shared_lib.so")
        }
    }
}

android.sources {
    main {
        jniLibs {
            dependencies {
                library "shared_lib"
            }
        }
    }
}
repositories {
    libs(PrebuiltLibraries) {
        shared_lib {
            binaries.withType(SharedLibraryBinary) {
                sharedLibraryFile = file("/path_to_libs/${targetPlatform.getName()}/shared_lib.so")
            }
        }
    }
}

android.sources {
    main {
        jni {
            dependencies {
                library "shared_lib" linkage "shared" 
            }
        }
    }
}
repositories {
    prebuilt(PrebuiltLibraries) {
        YourLib {
            binaries.withType(SharedLibraryBinary) {
                sharedLibraryFile = file("src/main/libs/armeabi-v7a/libYourLib.so")
            }
        }
    }
}

android.sources {
    main {
        jniLibs {
            dependencies {
                library "YourLib"
            }
        }
    }
}