gpt4 book ai didi

java - 在 ndk{} 中使用 moduleName 时如何设置 JNI 依赖?

转载 作者:行者123 更新时间:2023-11-28 05:36:42 25 4
gpt4 key购买 nike

我在 Android Studio 2.1.2 中使用 Gradle 2.10 和实验性插件 0.7.2 工作。我正在尝试将共享库链接到我的 JNI 源文件。我正在查看实验性插件 docshello-lib样本。

Hello-lib app/build.gradle 中有这部分:

android.ndk {
platformVersion = 21
moduleName = 'hello-libs'
toolchain = 'clang'
stl = 'gnustl_static'
cppFlags.addAll(['-std=c++11'])
ldLibs.addAll(['android', 'log'])
// build a default combined apk including all ABIs.
// abiFilters.addAll(['x86'])
}
android.sources {
main {
jni {
dependencies {
library 'gmath' linkage 'shared'
// if gperf were *.a, change shared --> static
library 'gperf' linkage 'shared'
}
}
}
}

所以我做了类似的事情,我的 app/build.gradle:

apply plugin: 'com.android.model.application'

def jniDir = "src/main/jni/"
def nLibDir = "src/main/jniLibs/"
model {
repositories {
libs(PrebuiltLibraries) {
RAWExtractor {
headers.srcDir = "${nLibDir}include"
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("${nLibDir}${targetPlatform.getName()}/libRAWExtractor.so")
}
}
}
}
android {
compileSdkVersion = 24
buildToolsVersion = "24.0.0"
defaultConfig {
applicationId = "xyz.jamescarroll.layer"
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
ndk {
moduleName = 'jni'
stl = 'gnustl_shared'
platformVersion = 21
toolchain = "clang"
cppFlags.addAll(['-v', '-std=c++11', '-fexceptions'])
ldFlags.addAll(['-I' + file("/src/main/jniLibs/include"),
'-L' + file("${nLibDir}")])
ldLibs.addAll(['android', 'log'])
}
sources {
main {
jni {
dependencies {
library "RAWExtractor" linkage 'shared'
}
}
}
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.pro'))
}
}
productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:design:24.0.0'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.android.support:cardview-v7:24.0.0'
compile 'com.android.support:recyclerview-v7:24.0.0'
compile 'jp.wasabeef:recyclerview-animators:2.2.3'
compile 'uk.co.markormesher:android-fab:1.2.1'
}

我的问题是,在 main{jni{}} 中有一些东西,在 ndk{} 中有一个 moduleName 我在 gradle 同步期间得到:

Error:No such property: srcDir for class: org.gradle.api.internal.file.DefaultSourceDirectorySet
Possible solutions: srcDirs

我不知道为什么会这样,我一直在努力研究这个,但我没能找到任何关于这个和更新的插件的信息。如果我注释掉 main{jni{}} 或 moduleName 中的所有内容,我可以同步项目,但其他部分会中断。

项目结构(没有足够的代表链接到图片):

|app
|src
|main
|jni
jni.c
// etc
|jniLibs
|{platform} // (armeabi, armeabi-v7a, arm64-v8a, etc.)
libRAWExtractor.so

有谁知道如何设置依赖关系和模块名称?或者,有谁知道如何使用实验性插件 0.7.2 链接共享库?

最佳答案

你必须改变这个 DSL 声明

headers.srcDir = "${nLibDir}include"

headers.srcDir "${nLibDir}include"

关于java - 在 ndk{} 中使用 moduleName 时如何设置 JNI 依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com