앱에 원시 코드를 추가하기로 했으므로 Gradle Experimental 플러그인으로 이동했습니다. 새로운 구문으로 인해 많은 호환성 문제가 성공적으로 해결되었지만 여전히 문제가 있습니다.Gradle로 마이그레이션하는 데 어려움이 있음
앱 자체가 작동하지만이 마이그레이션을 보관 할 수 있어야한다이 누락 가지가 있습니다 : Android.mk 방법을 대체
- 디버그 네이티브 코드 파일, 변경
디버그
을 만들 때, 그래서 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
}
}
이 현재 폴더 구조입니다 : 나는 '
Gradle NDK 부분에 누락 된 것이 있음을 확신하지만, 전문가를 해결해야합니다. 흠? 그것이 바보 같은 질문을하게되면 미안하지만, NDK와 mk 논리에 들어가는 것은 처음입니다. 편집
: 나는 최신 NDK/AS 네이티브 코드를 디버깅 할 수없는 같은 문제를보고 피드백을 발견, 그래서 우리는 내가 안드로이드로 업데이트 할 때 ...