2017-01-20 7 views
0

Поскольку я решил добавить собственный код в приложение, я перешел в 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 
     } 
} 

Это текущая структура папок:

enter image description here

Я Я уверен, что в части Gradle NDK что-то не хватает, но я должен решить про я проблема? Извините, если это приведет к тупым вопросам, но это первый раз, когда я попадаю в логику NDK и mk.

EDIT: я нашел обратные связи, сообщающие та же проблема, не будучи в состоянии отладки собственного кода с последним НДК/AS, поэтому мы должны ждать ...

ответ

0

Проблема была решена, когда я обновлен до Android Studio 2.3.3 вместе с обновлением плагина Gradle до версии 2.3.3.

Также на Android Studio 3.0 все еще нормально.