Как установить зависимость JNI при использовании moduleName в ndk {}?

Я работаю в Android Studio 2.1.2 с Gradle 2.10 и экспериментальным плагином 0.7.2. Я пытаюсь связать разделяемую библиотеку с моими исходными файлами JNI. Я просматривал экспериментальный плагин документы и привет Пб образец.

Приложение Hello-lib / 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 {}} и moduleName внутри ndk {} я получаю во время синхронизации 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

Кто-нибудь знает как установить зависимость и moduleName? Или кто-нибудь знает, как связать разделяемую библиотеку, используя экспериментальный плагин 0.7.2?

0

Решение

Вы должны изменить это заявление DSL

headers.srcDir = "${nLibDir}include"

в

headers.srcDir "${nLibDir}include"

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]