Android Studio本机断点未被击中

时间:2018-03-07 21:44:56

标签: android android-studio debugging android-ndk

我有一个包含大量本机和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文件夹

但是

中有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 

0 个答案:

没有答案