java - 无法启用 JNI 调试器

标签 java android c android-ndk

我最近开始使用Java Native Interface (JNI),遇到了一些问题,希望你能帮助我解决。

我使用的是 Android Studio 2.1.1、SDK 工具 25.1.7、NDK 12、API 21。

1.我的主要问题是我无法调试C代码,只能调试java。 我将尝试解释我对一个更简单的代码进行调试的尝试,我将包括其中。

1.1 我使用命令 ndk-build NDK_DEBUG=1 将 C 代码编译为 .so。

1.2 我已将 SDK\NDK 路径添加到 Android Studio 项目结构中。

1.3 我已在 build.gradle 中添加了“jnidebuggable=true”。

1.4 我在“运行”->“编辑配置”中创建了一个带有“Hybrid”的新调试 session 设置并将 .so 库加载到其中。

1.5 附加我的 Android.mk、Application.mk、build.gradle、C 代码和文件。

1.6 代码正在运行并工作,它没有到达 C 代码内的断点。

2.我如何监控代码的堆和堆栈使用情况,尤其是 JNI?还可以改变吗?

3.与2相同的问题。如何减少堆中的依赖性?将我的变量定义为静态可以解决问题吗?

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sub
LOCAL_SRC_FILES := subst.c
include $(BUILD_SHARED_LIBRARY)

应用程序.mk

APP_ABI := all
APP_BUILD_SCRIPT := C:\Users\Nir\AndroidStudioProjects\FirstApp\jni\Android.mk

C代码

jdouble Java_nir_firstapp_MainActivity_subst(JNIEnv* env, jobject obj, jdouble A, jdouble B)
{
int x;
x=A-B;
return(x);
}

构建.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "nir.firstapp"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        jniDebuggable true
        debuggable true
    }
    }
}

MainActivity相关代码

public native double subst(double A, double B);
static{
    System.loadLibrary("sub");
}
double calc = subst(Double.valueOf(num1str),Double.valueOf(num2str));

真诚的感谢您, 尼尔

最佳答案

要启用 native 调试,请在 Android Studio 下编译 C++ 代码。

在 2.2 版本中,您可以使用 externalNativeBuild 。对于 2.1,您只有 experimental Gradle 插件。不幸的是,它没有完全集成到 AS 中,例如文件/项目结构(又名Ctrl-;)无法理解这些build.gradle文件。

关于java - 无法启用 JNI 调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575440/

相关文章:

Java在循环子句上获取类字段并检查值

java - 如何从 APK 文件恢复 Gradle 文件?

java - getClassLoader().getResource() 抛出 NullPointerException?为什么不是 FileNotFoundException?

java - spring boot 中的多个 liquibase 配置

android - 直接链接到 Google Play 上的应用

c++ - 编译器 : What if condition is always true/false

C - 如何在内存级别进行算术转换?

c - 我如何实际使用授权服务?

Java多线程时间切换

android - 是否可以在 Activity 的一个 <intent-filter> 中注册两个 Action