Поскольку я решил добавить собственный код в приложение, я перешел в Gradle Experimental plugin после this migration guide. Я успешно решил много проблем совместимости из-за нового различного синтаксиса, но у меня все еще есть проблемы.Смуты, мигрирующие в Gradle Experimental с NDK build
Само приложение работает, но есть два недостающие вещей, которые я должен быть в состоянии архива с этой миграцией:
- файлов отладка родной код
- сделать процесс NDK-сборка автоматом, заменяющих метод Android.mk , поэтому перекомпилировать необходимо LIBS при внесении изменений
Debug
В первом пункте я прочитал, что для Edit Configurations > Debugger > Debug type = Hybrid
должно быть достаточно, но я все еще не могу выполнить отладку собственного кода. Эта проблема может быть вызвана тем фактом, что я неправильно настраиваю градир? (Смотри ниже)
НДК-строить
Я пытаюсь перевести Android.mk и положить его в Gradle построить файл без успеха. Изменения в собственных файлах не отражаются при запуске приложения, потому что родные библиотеки не были восстановлены. Я попытался получить советы от here.
Мой текущий Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
MY_CHROMAPRINT_SRC_FILES := \
../deps/chromaprint/src/audio_processor.cpp \
../deps/chromaprint/src/base64.cpp \
../deps/chromaprint/src/chroma.cpp \
../deps/chromaprint/src/chroma_filter.cpp \
../deps/chromaprint/src/chromaprint.cpp \
../deps/chromaprint/src/chroma_resampler.cpp \
../deps/chromaprint/src/fft.cpp \
../deps/chromaprint/src/fft_lib_kissfft.cpp \
../deps/chromaprint/src/filter.cpp \
../deps/chromaprint/src/fingerprint_calculator.cpp \
../deps/chromaprint/src/fingerprint_compressor.cpp \
../deps/chromaprint/src/fingerprint_decompressor.cpp \
../deps/chromaprint/src/fingerprinter_configuration.cpp \
../deps/chromaprint/src/fingerprinter.cpp \
../deps/chromaprint/src/image_builder.cpp \
../deps/chromaprint/src/integral_image.cpp \
../deps/chromaprint/src/silence_remover.cpp \
../deps/chromaprint/src/spectral_centroid.cpp \
../deps/chromaprint/src/spectrum.cpp \
../deps/chromaprint/src/avresample/resample2.c
MY_KISSFFT_SRC_FILES := \
../deps/kissfft/kiss_fft.c \
../deps/kissfft/tools/kiss_fftr.c
LOCAL_MODULE := my_app_lib
LOCAL_SRC_FILES := my_app_lib.c $(MY_CHROMAPRINT_SRC_FILES) $(MY_KISSFFT_SRC_FILES)
LOCAL_CFLAGS := -DWITH_KISSFFT -DHAVE_ROUND
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../deps/chromaprint/src $(LOCAL_PATH)/../deps/kissfft
include $(BUILD_SHARED_LIBRARY)
build.gradle файл как сейчас:
apply plugin: 'com.android.model.application'
def ndkDir = System.getenv("ANDROID_NDK_HOME")
def propertiesFile = project.rootProject.file('local.properties')
if (propertiesFile.exists()) {
Properties properties = new Properties()
properties.load(propertiesFile.newDataInputStream())
ndkDir = properties.getProperty('ndk.dir')
}
model {
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
ndk {
moduleName "my_app_lib"
CFlags.add("-DWITH_KISSFFT -DHAVE_ROUND -DDEBUG_MODE=1")
CFlags.add("-I${file("deps/chromaprint/src")}".toString())
ldLibs.add("log")
stl "stlport_static"
}
defaultConfig.with {
applicationId "com.my_app"
minSdkVersion.apiLevel 16
targetSdkVersion.apiLevel 25
versionCode 132
versionName "1.6.108"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
debuggable = false
minifyEnabled = true
proguardFiles.add(file("proguard-rules.pro"))
ndk.with {
debuggable = true
}
}
debug {
debuggable = true
minifyEnabled = false
proguardFiles.add(file("proguard-rules.pro"))
ndk.with {
debuggable = true
}
}
}
sources {
main {
java {
source {
srcDir "src"
}
}
jni {
source {
srcDirs = [ "jni" ]
}
}
jniLibs {
source {
srcDirs = [ "libs" ]
}
}
}
}
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
}
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK'){
commandLine "$ndkDir\\ndk-build.cmd",'-C', file('jni').absolutePath
}
tasks.all {
task ->
if (task.name.startsWith('compile') && task.name.contains('MainC')) {
task.enabled = false
}
if (task.name.startsWith('link')) {
task.enabled = false
}
if (task.name.endsWith('SharedLibrary')) {
task.dependsOn buildNative
}
}
Это текущая структура папок:
Я Я уверен, что в части Gradle NDK что-то не хватает, но я должен решить про я проблема? Извините, если это приведет к тупым вопросам, но это первый раз, когда я попадаю в логику NDK и mk.
EDIT: я нашел обратные связи, сообщающие та же проблема, не будучи в состоянии отладки собственного кода с последним НДК/AS, поэтому мы должны ждать ...