Я смотрел видео на
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. Спасибо!
Задача ещё не решена.