我有一个大型Android项目,其中包含许多本地代码和Java代码。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'
}
}
Run Code Online (Sandbox Code Playgroud)
我在Java中声明了本机函数的地方,它们显示为红色,并显示错误“无法解析相应的JNI函数”
我已经按照本文的每个步骤进行操作: “无法解析相应的JNI函数” Android Studio
该项目可以正常构建和运行,但是Java无法识别本机功能。
我注意到的一件事是,其中没有armeabi-v7a文件夹 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
Run Code Online (Sandbox Code Playgroud)
还有其他一些晦涩的设置可能会禁用本机调试吗?
编辑:
这就是我在Java(BaseActivity.java)中声明本机函数的方式:
native boolean SetupProject ();
Run Code Online (Sandbox Code Playgroud)
这就是我在C ++中声明它们的方式:
JNIEXPORT jboolean JNICALL Java_com_mycompany_myapp_BaseActivity_SetupProject(JNIEnv * env, jobject obj) {
//some code …Run Code Online (Sandbox Code Playgroud)