ndk-gdb 对java/native code联合调试(升级版)
之前写过一篇 关于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联合调试(升级版)的更多相关文章
- NDK开发历程(一):android native code的调试方法
引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...
- NDK环境搭建(Native Code的编译,不需要Cygwin)
分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...
- NDK GDB 中打印vector , vector<vector <> >
在android上进行native开发的时候,我们需要用NDK-GDB 对native code进行调试,其中很麻烦的是,我使用的NDK版本是4.0,该版本还不支持用NDK-GDB直接打印vector ...
- GDB + gdbserver 远程调试android native code
原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...
- Calling a Java Method from Native Code
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html Calling Java Method ...
- JNI/NDK开发指南(二)——JVM查找java native方法的规则
通过第一篇文章,大家明白了调用native方法之前,首先要调用System.loadLibrary接口加载一个实现了native方法的动态库才能正常访问,否则就会抛出java.lang.Unsatis ...
- Android jni/ndk编程三:native访问java
一.访问静态字段 Java层的field和method,不管它是public,还是package.private和protected,从 JNI都可以访问到,Java面向语言的封装性不见了. 静态字段 ...
- JAVA Native Interface (JNI)
1. Introduction At times, it is necessary to use native (non-Java) codes (e.g., C/C++) to overcome ...
- [Xamarin] 透過Native Code呼叫 JavaScript function (转帖)
今天我們來聊聊關於如何使用WebView 中的Javascript 來呼叫 Native Code 的部分 首先,你得先來看看這篇[Xamarin] 使用Webview 來做APP因為這篇文章至少講解 ...
随机推荐
- 解决 SQLite数据库 no current row
场景: SQLite数据库,在查询数据时,提示 标题错误异常.查看堆栈,是在SQLiteDataReader.CheckValidRow 时报错. 数据查询是通过 adapter.Fill(dt) 进 ...
- oracle学习笔记(一)配置监听
服务器端: 监听器 lsnrctl 启动监听 lsnrctl start [LISTENER] 查看监听 lsnrctl status 或者 lsnrctl service C:\Docu ...
- 黄聪:wordpress如何扩展TinyMCE编辑器,添加自定义按钮及功能
在functions.php文件里面添加: add_action( 'admin_init', 'my_tinymce_button' ); function my_tinymce_button() ...
- (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 ...
- jetty-run运行报错的原因
- CharsetUtils.java
/* * Copyright (c) 2013. * * Licensed under the Apache License, Version 2.0 (the "License" ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- linux命令(7)killall
killall命令: Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀 ...
- EditText获取焦点显示输入法时布局自动改变的解决方案
最近在调试Android时,发现当屏幕下方的EditText获取焦点,显示输入法时候.页面布局重新调整而不是整体上移.导致部分控件显示不完全. 最终解决方案是修改项目AnroidManifest.xm ...
- “/wechat”应用程序中的服务器错误。
对路径“C:\inetpub\wwwroot3\wechat\img\qrcode\”的访问被拒绝. “/wechat”应用程序中的服务器错误. 对路径“C:\inetpub\wwwroot3\wec ...