我有一个包含大量本机和Java代码的大型Android项目。 Java代码调试很好。所有断点都被击中了。
本机调试器连接,但永远不会遇到断点。我正在使用ndk-build。
在我的gradle文件中,我声明了以下内容:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
debuggable false
jniDebuggable false
}
debug {
debuggable true
jniDebuggable true
minifyEnabled false
packagingOptions{
doNotStrip "*/armeabi-v7a/*.so"
doNotStrip "*/arm64-v8a/*.so"
doNotStrip "*/x86/*.so"
doNotStrip "*/x86_64/*.so"
}
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
我在Java中声明了我的原生函数,它们显示为红色,错误为“无法解析相应的JNI函数”
我已经关注了这篇文章的每一步: " Cannot Resolve Corresponding JNI Function" Android Studio
项目构建并运行良好,但Java中无法识别本机函数。
我注意到的一件事是obj\local\
但是
中有armeabi-v7a文件夹build\intermediates\transforms\stripDebugSymbol\release\0\lib
build\intermediates\transforms\mergeJniLibs\release\0\lib
build\intermediates\ndkBuild\release\obj\local
build\intermediates\ndkBuild\debug\obj\local
.externalNativeBuild\ndkBuild\release
.externalNativeBuild\ndkBuild\debug
是否还有其他模糊设置可能会禁用本机调试?
编辑:
这就是我在Java中声明我的本机函数的方法(BaseActivity.java):
native boolean SetupProject ();
这就是我在C ++中声明它们的方式:
JNIEXPORT jboolean JNICALL Java_com_mycompany_myapp_BaseActivity_SetupProject(JNIEnv * env, jobject obj) {
//some code
return JNI_TRUE;
}
EDIT2:
图书馆加载:
static {
try {
System.loadLibrary("myapp");
} catch( UnsatisfiedLinkError e ) {
Log.e("MyApp", "Native code library failed to load: " + e);
}
}
Android.mk:
LOCAL_PATH := $(call my-dir)
MY_LOCAL_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := myapp
FILE_LIST_APP := $(wildcard $(LOCAL_PATH)/App/*.cpp)
LOCAL_SRC_FILES += $(FILE_LIST_APP:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/App
LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true
LOCAL_CFLAGS := -O0 -Wno-error -fshort-wchar -fpermissive -g -ggdb -ffast-math
LOCAL_LDLIBS := -lm -llog -ljnigraphics -ldl
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -ldl
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lz
LOCAL_LDLIBS += -landroid
include $(BUILD_SHARED_LIBRARY)
Application.mk:
APP_PLATFORM := android-25
APP_CFLAGS += -Wno-error=format-security
APP_OPTIM := debug
APP_STL := gnustl_static