【发布时间】:2016-06-01 17:40:50
【问题描述】:
我最近开始使用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 我在 Run->Edit Config 中创建了一个带有“Hybrid”的新调试会话 设置并将 .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);
}
build.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));
我真诚的谢谢你, 尼尔
【问题讨论】:
标签: java android c android-ndk