2017-01-20 1 views
0

앱에 원시 코드를 추가하기로 했으므로 Gradle Experimental 플러그인으로 이동했습니다. 새로운 구문으로 인해 많은 호환성 문제가 성공적으로 해결되었지만 여전히 문제가 있습니다.Gradle로 마이그레이션하는 데 어려움이 있음

앱 자체가 작동하지만이 마이그레이션을 보관 할 수 있어야한다이 누락 가지가 있습니다 : Android.mk 방법을 대체

  • 는 NDK 빌드 프로세스가 자동으로 확인

    • 디버그 네이티브 코드 파일, 변경

      디버그

    을 만들 때, 그래서 libs가 필요 다시 컴파일 첫 번째 요점은 Edit Configurations > Debugger > Debug type = Hybrid으로 충분하다는 것이었지만 여전히 네이티브 코드의 디버그를 수행 할 수는 없습니다. 이 문제는 내가 실제로 gradle을 구성하지 않는다는 사실 때문에 발생할 수 있습니다.

    나는 Android.mk를 번역하려고 노력하고 Gradle을로 퍼팅 성공하지 않고 파일을 구축하고있어

    NDK 빌드 (아래 참조). 네이티브 파일의 변경은 네이티브 라이브러리가 재구성되지 않았기 때문에 앱을 실행할 때 반영되지 않습니다. 나는 약간의 충고를 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 논리에 들어가는 것은 처음입니다. 편집

    : 나는 최신 NDK/AS 네이티브 코드를 디버깅 할 수없는 같은 문제를보고 피드백을 발견, 그래서 우리는 내가 안드로이드로 업데이트 할 때 ...

  • 답변

    0

    문제는 해결되었다 기다려야 Studio 2.3.3과 함께 프로젝트 Gradle 플러그인을 2.3.3으로 업데이트합니다.

    Android Studio 3.0에서도 여전히 괜찮습니다.

    관련 문제