由于我决定将原生代码添加到应用中,因此我转移到this migration guide之后的Gradle Experimental插件。由于新的语法不同,我已成功解决了许多兼容性问题,但我仍有问题。
应用程序本身可以运行,但我应该能够通过此迁移归档两个缺失的内容:
调试
关于第一点我读到去Edit Configurations > Debugger > Debug type = Hybrid
应该就够了,但我仍然无法执行本机代码的调试。这个问题可能是因为我没有正确配置gradle这个事实? (见下文)
NDK-构建
我正在尝试翻译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逻辑。
编辑:我发现反馈报告同样的问题无法使用最新的NDK / AS调试本机代码,所以我们必须等待......
答案 0 :(得分:0)
当我更新到Android Studio 2.3.3并将项目Gradle插件更新为2.3.3时,问题解决了。
同样在Android Studio 3.0上,它还可以。