没有遇到Android Studio本机断点

eri*_*nys 5 debugging android android-ndk android-studio

我有一个大型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
    return JNI_TRUE;
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

库负载:

static {
    try { 
        System.loadLibrary("myapp");                                                        
    } catch( UnsatisfiedLinkError e ) {
         Log.e("MyApp", "Native code library failed to load: " + e);
     }
}
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

Application.mk:

APP_PLATFORM := android-25
APP_CFLAGS += -Wno-error=format-security

APP_OPTIM   :=   debug

APP_STL     := gnustl_static 
Run Code Online (Sandbox Code Playgroud)