Предварительно собранные библиотеки AndroidStudio NDK с gradle — ошибка Не удалось выполнить задачу ‘: app: buildNative’

Я смотрел видео на
http://ph0b.com/android-studio-gradle-and-ndk-integration/

Похоже, моя проблема в моих файлах build.gradle и Android.mk

Я пытаюсь интегрировать готовую библиотеку (.so) в Android NDK.
— я создал src / main / jni — куда я положил все .cpp файлы
— У меня также есть каталог src / main / jniLibs, где у меня есть файл .so для каждой архитектуры.
— Я установил local.properties указать мой SDK и мой каталог ndk.
— Я понял, что Android создаст файл Android.mk в каталоге отладки и создаст папку libs в src / main / libs для каждой архитектуры.
_ Я использую Android Studio 1.01 с SDK 19.1. Я вижу armeabiv7a и armeabi в каталоге libs. Я предполагаю, что Android создал этих библиотек.

** Я получаю следующую ошибку:
FAILURE: сборка не удалась, исключение.
* Что пошло не так:
Не удалось выполнить задачу «: app: buildNative».

Процесс ‘команда’ Documents / android_development / android-ndk-r10d / ndk-build » завершен с ненулевым значением выхода 2
* Пытаться:
Запустите с параметром —stacktrace, чтобы получить трассировку стека. Запустите с параметром —info или —debug, чтобы получить больше вывода журнала. **

Мои вопросы:
— Нужна ли моя версия файла Android.mk в моем каталоге jni?
— Я знаю, что должен изменить build.gradle, что мне здесь не хватает?
— Я бы хотел протестировать эмулятор с помощью Intel HAXM.
Как я вижу cFlags для Intel HAXM с Mac.

Мой build.gradle:

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

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com....soundtouchexamplewithseekbar"minSdkVersion 19
targetSdkVersion 21
versionCode 1
versionName "1.0"}

// .. android settings ..

productFlavors {
x86{
ndk {
abiFilter "x86"stl "gnustl_shared"moduleName "soundtouch-jni"// cFlags  "-mtune=atom -mssse3 -mfpmath=sse"// Define   some macros
// cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"cFlags "-std=c++11"//  ldLibs "GLESv3", "dl", "log"ldLibs "log", "z", "m"}
}arm {
versionCode Integer.parseInt("1" + defaultConfig.versionCode)
ndk {
abiFilter "armeabi"stl "gnustl_shared"moduleName "soundtouch-jni"cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"   // Define some macros
ldLibs "EGL", "GLESv3", "dl", "log"}
}
armv7{
ndk {
abiFilter "armeabi-v7a"stl "gnustl_shared"moduleName "soundtouch-jni"cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"   // Define some macros
ldLibs "EGL", "GLESv3", "dl", "log"}
}
mips {
ndk {
abiFilter "mips"moduleName "soundtouch-jni"stl "gnustl_shared"cFlags "-DANDROID_NDK -D_DEBUG DNULL=0"   // Define some macros
ldLibs "EGL", "GLESv3", "dl", "log"}
}
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),    'proguard-rules.pro'
}
}

sourceSets {
main {
java.srcDirs = ['src/main']
res.srcDirs = ['src/main/res']
jniLibs.srcDirs = ['src/main/jniLibs']
jni.srcDirs = [] // This prevents the auto generation of Android.mk}
}

}

task buildNative(type: Exec, description: 'Compile JNI source via  NDK')
{
def ndkDir = android.plugin.ndkFolder
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
// Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'-d',
'NDK_DEBUG=1'
}

task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.plugin.ndkFolder
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
// Change src/main/jni the relative path to your jni source
'clean'
}clean.dependsOn 'cleanNative'

tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:21.0.3'
}

========
Мой Android.mk:

LOCAL_PATH := $(call my-dir)
#LOCAL_CPP_FEATURES += -fno-exceptions   commented Jan 28th

include $(CLEAR_VARS)

# *** Remember: Change -O0 into -O2 in add-applications.mk ***

# MODIFICATION START
MY_SOURCE_DIR :=
<I have source dir here with full path >
# MODIFICATION END

LOCAL_MODULE    := soundtouch-jni
LOCAL_SRC_FILES := soundtouch-jni.cpp $(MY_SOURCE_DIR)/AAFilter.cpp

# for native audio
#LOCAL_LDLIBS    += -lgcc
LOCAL_LDLIBS    += -lz  #added jan 28th
LOCAL_C_INCLUDES += $(LOCAL_PATH)/soundtouch/include
# --whole-archive -lgcc
# for logging
LOCAL_LDLIBS    += -llog
# for native asset manager
#LOCAL_LDLIBS    += -landroid
# don't export all symbols
# added "-marm" switch to use arm instruction set instead of thumb       for improved calculation performance.
# removed -marm here as I was getting error while building x86    instruction -jan 19,2014
LOCAL_CFLAGS += -Wall -fvisibility=hidden -I        $(MY_SOURCE_DIR)/../../include -D ST_NO_EXCEPTION_HANDLING -fdata-sections -ffunction-sections

Пожалуйста, поправьте меня, если мое понимание неверно. Я посмотрел видео, это первое, что я сделал до того, как опубликовал вопрос. Это одно из лучших видео для понимания. Я думал, что весь смысл делать это gradle — это избегать ручной сборки. Я включил в свой ндк-билд

task buildNative(type: Exec, description: 'Compile JNI source via  NDK')
{
def ndkDir = android.plugin.ndkFolder
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
// Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'-d',
'NDK_DEBUG=1'
}

Я хотел бы знать, если я должен добавить какие-либо заявления в build.gradle или Android.mk. Спасибо!

0

Решение

Задача ещё не решена.

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


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