之前写过一篇 关于android native 开发,调试的文章(http://www.cnblogs.com/yaozhongxiao/archive/2012/03/13/2393959.html)

  最近参与项目也涉及到这部分内容,发现随着不断的发展,开发调试变得越来越简单,应证了科学技术是第一生产力啊,你阅读完后发现调试native渐渐变得不是问题的问题了

  ndk  :   android-ndk-r9n

  eclipse: android 官网下载集成包,已经包含了adt等所需的完整环境

  在eclipse中设置好ndk的路径,然后开始创建工程,并调试

一、创建android工程

二、添加Native支持

三、检查工程目录结构是否正常

一目了然,简单的操作整个工程就建立完毕了。

四、切换至C/C++视图,方便C/C++代码编写

五、这样一个完整的工程就创建完成了,接下来我们要实现的功能是点击一下按键,显示从Jni返回的字符串。

1. 修改activity_main.xml布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/hello_world"
android:textSize="@dimen/font_size" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:onClick="call_jni"
android:text="@string/call_jni" />
</RelativeLayout>

2. 修改MainActivity.java

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void call_jni(View v) {
((TextView) findViewById(R.id.textView1)).setText(jni_call());
} private native String jni_call(); static {
System.loadLibrary("DebugNdkTest");
}
}

3. 获取jni_call的jni头文件

$ cd $DebugNdkTest/jni
$ javah -classpath ../bin/classes com.linguofeng.debugndktest.MainActivity

4. 修改DebugNdkTest.cpp

#include "com_linguofeng_debugndktest_MainActivity.h"

JNIEXPORT jstring JNICALL Java_com_linguofeng_debugndktest_MainActivity_jni_1call
(JNIEnv * env, jobject) { return env->NewStringUTF("Hello From JNI");
}

六、运行

七、接下来就是debug了,debug前需要修改工程属性

八、在DebugNdkTest.cpp文件第6行打个断点

当点击访问JNI按钮的时候就会停在断点处了,现在就可以像java的debug一样调试了,很方便。

ndk-gdb 对java/native code联合调试(升级版)的更多相关文章

  1. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  2. NDK环境搭建(Native Code的编译,不需要Cygwin)

    分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...

  3. NDK GDB 中打印vector , vector<vector <> >

    在android上进行native开发的时候,我们需要用NDK-GDB 对native code进行调试,其中很麻烦的是,我使用的NDK版本是4.0,该版本还不支持用NDK-GDB直接打印vector ...

  4. GDB + gdbserver 远程调试android native code

    原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...

  5. Calling a Java Method from Native Code

    http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html Calling Java Method ...

  6. JNI/NDK开发指南(二)——JVM查找java native方法的规则

    通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.Unsatis ...

  7. Android jni/ndk编程三:native访问java

    一.访问静态字段 Java层的field和method,不管它是public,还是package.private和protected,从 JNI都可以访问到,Java面向语言的封装性不见了. 静态字段 ...

  8. JAVA Native Interface (JNI)

    1.  Introduction At times, it is necessary to use native (non-Java) codes (e.g., C/C++) to overcome ...

  9. [Xamarin] 透過Native Code呼叫 JavaScript function (转帖)

    今天我們來聊聊關於如何使用WebView 中的Javascript 來呼叫 Native Code 的部分 首先,你得先來看看這篇[Xamarin] 使用Webview 來做APP因為這篇文章至少講解 ...

随机推荐

  1. 解决 SQLite数据库 no current row

    场景: SQLite数据库,在查询数据时,提示 标题错误异常.查看堆栈,是在SQLiteDataReader.CheckValidRow 时报错. 数据查询是通过 adapter.Fill(dt) 进 ...

  2. oracle学习笔记(一)配置监听

    服务器端: 监听器   lsnrctl 启动监听 lsnrctl start [LISTENER] 查看监听 lsnrctl  status  或者  lsnrctl  service C:\Docu ...

  3. 黄聪:wordpress如何扩展TinyMCE编辑器,添加自定义按钮及功能

    在functions.php文件里面添加: add_action( 'admin_init', 'my_tinymce_button' ); function my_tinymce_button() ...

  4. (C/C++ )Interview in English - Virtual

    Q: What is virtual function?A: A virtual function or virtual method is a function or method whose be ...

  5. jetty-run运行报错的原因

  6. CharsetUtils.java

    /* * Copyright (c) 2013. * * Licensed under the Apache License, Version 2.0 (the "License" ...

  7. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. linux命令(7)killall

    killall命令: Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...

  9. EditText获取焦点显示输入法时布局自动改变的解决方案

    最近在调试Android时,发现当屏幕下方的EditText获取焦点,显示输入法时候.页面布局重新调整而不是整体上移.导致部分控件显示不完全. 最终解决方案是修改项目AnroidManifest.xm ...

  10. “/wechat”应用程序中的服务器错误。

    对路径“C:\inetpub\wwwroot3\wechat\img\qrcode\”的访问被拒绝. “/wechat”应用程序中的服务器错误. 对路径“C:\inetpub\wwwroot3\wec ...