gdb调试Android-5.1版本JNI模块
来源:互联网 发布:淘宝马切达是什么牌子 编辑:程序博客网 时间:2024/06/10 20:47
未完成!!!但是可以看
本文讲述在gdb的模式下如何来调试Android虚拟机中的JNI的代码模块
这里我们先介绍JNI模式中的Java程序来调用C程序来实现Java函数中的函数功能,我们假设TestJNI为Java文件中的主类,那就可能需要TestJNI.java、TestJNI.h、TestJNI.c、TestJNI.o、等文件。(所有的对系统的操作都是在/workspace/android/目录下)
一、首先编写带有native本地方法的一个Java文件
class TestJNI{ static{ System.loadLibrary("TestJNI"); } public static native int add(int a, int b); public static void main(String[] args){ int c = add(3,4); System.out.println("Test JNI"); System.out.println("c="+c); }}
这个Java文件可以使用gedit文本编辑器进行生成,并且命名为TestJNI.java
接下来使用javac命令进行编译java文件,生成TestJNI.class文件
生成的.class文件将会在后面用来生成.dex文件,这个.dex文件最后就会推送到Android虚拟机的sdcard中。
二、使用javah命令来生成TestJNI.h文件
生成的TestJNI.h文件是这样的
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class TestJNI */#ifndef _Included_TestJNI#define _Included_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: TestJNI * Method: add * Signature: (II)I */JNIEXPORT jint JNICALL Java_TestJNI_add (JNIEnv *, jclass, jint, jint);#ifdef __cplusplus}#endif#endif
注意:此时生成的TestJNI.h文件中的头文件引用部分可能是这样的
#include <jni.h>要将它改成这样
#include "jni.h"否则可能在后面进行gdb调试的时候,会报出找不到 jni.h头文件的错误。
三、编写TestJNI.c文件
由于在TestJNI.c中我们将要实现TestJNI.h中的Java_TestJNI_add函数的功能,那么先将上面生成
JNIEXPORT jint JNICALL Java_TestJNI_add (JNIEnv *, jclass, jint, jint);的黏贴到TestJNI.c中,并进行代码功能实现。
#include "jni.h"JNIEXPORT jint JNICALL Java_TestJNI_add (JNIEnv * env, jclass class, jint a, jintb){int c = a + b;return c;}编写完TestJNI.c文件后我们将上面的所有文件和系统的jni.h文件放到一个文件夹下。这时由于我的Android虚拟机的程序工作目录是在系统的/workspace/android/文件夹下。Android-5.1版本系统的jni.h是在android/libnativehelper/include/nativehelper中,所以现在先将jni.h移动到/workspace/android/目录下面。
0 0
- gdb调试Android-5.1版本JNI模块
- Android使用ndk-gdb调试jni程序
- android jni ndk-gdb调试笔记
- android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
- linux 下 android ndk-gdb 调试 jni 中的c 代码
- 内核gdb模块调试
- 用GDB调试JNI程序
- 用GDB调试JNI程序
- 使用GDB调试JNI代码
- 使用GDB调试JNI代码
- 使用GDB调试JNI代码
- 用gdb调试内核模块
- gdb调试动态加载模块
- gdb 如何调试release版本
- gdb远程调试release版本
- gdb android 调试
- Android 使用gdb调试
- Android gdb调试so
- 网络篇 - 01.网络编程概述
- 新锐国际黑心外包商,拖欠员工工资,社保、公积金
- 8-26 UIControl UIGestureRecognizer 控件
- Oracle Workflow Demo (1) - 一个简单的请假申请工作流
- 最新制作 Mac 电脑 U 盘启动盘笔记
- gdb调试Android-5.1版本JNI模块
- cocos2dx 玩转标签Label类
- 背包问题——“01背包”详解及实现(包含背包中具体物品的求解)
- for循环输出<国际象棋>
- HDU1285 - 确定比赛名次 拓补排序
- Proud Merchants 3466 (01背包+排序+技巧)
- hdu 1869 六度分离
- 网络篇 - 02.NSURLConnection基本使用
- hdoj.1131 Count the Trees【卡特兰数列+阶乘】 2015/08/26