android studio C/C++ jni 编写以及调试方法

时间:2023-03-09 05:40:25
android studio C/C++ jni 编写以及调试方法

原文路径:

    http://blog.sina.com.cn/s/blog_ad64b8200102vnxl.html

目录

开发环境 2

编写hello_jni程序 2

运行结果 10

调试程序 10

开发环境

IDE: android studio 1.1.0

android NDK :R10

android SDK : android -19

编写hello_jni程序

建立一个空的activity项目目录如图:

android studio C/C++ jni 编写以及调试方法

进入下图标红的文件 MainActivity文件中

android studio C/C++ jni 编写以及调试方法

添加如下代码在MainActivity类内

static {

System.loadLibrary("hello_jni");

}

public native  String getstringfromC();

打开终端android studio已经提供了终端如图:

android studio C/C++ jni 编写以及调试方法

首先进入java目录执行命令:

javah -d ../jni  com.example.root.ndk_sample.MainActivity

com.example.root.ndk_sample.MainActivity是native函数的所在的包名和类名,中间使用“.”号分开。

这时候就会在java目录下面出现jni目录如图:

android studio C/C++ jni 编写以及调试方法

添加*.c文件在jni目录中如图:(文件名字为hello_jni.c)

android studio C/C++ jni 编写以及调试方法

备注:红色方框内的只是为了方便演示调试使用,没有额外的功能。

编写Android.mk和Application.mk 放在jni目录下面。

结构如图:

android studio C/C++ jni 编写以及调试方法

Android.mk文件的内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE :=hello_jni

LOCAL_SRC_FILES := hello_jni.c

include $(BUILD_SHARED_LIBRARY)

Application.mk 文件内容为:

APP_ABI := all

APP_OPIM :=debug

配置ndk的目录配置文件为图中标红的地方。

android studio C/C++ jni 编写以及调试方法

在最后一行添加如下内容:

ndk.dir=

配置

android studio C/C++ jni 编写以及调试方法

在红色的方框内的文件夹下的红条出添加如下配置:

ndk{

moduleName"hello_jni"

}

在下图中

android studio C/C++ jni 编写以及调试方法

在红色的方框内的文件夹下添加蓝色的内容。

在如下图中:

android studio C/C++ jni 编写以及调试方法

在红色的MainActivity中的oncreate函数中添加蓝色的函数。

此时android调用C语言的的函数已经完成了,此时运行结构如下图:

运行结果

android studio C/C++ jni 编写以及调试方法

但是想要调试还要做好多的事情。

调试程序

在如下图中:

android studio C/C++ jni 编写以及调试方法

在红框内的文件中添加蓝色的部分(在android{}内)。

在下图中:

android studio C/C++ jni 编写以及调试方法

在文件androidMainfast.xml中的application 的蓝色框内添加android:debuggable="true"。

配置编译

android studio C/C++ jni 编写以及调试方法

将上图中的jni 的debuging配置为true。

在终端中进入jni目录下面执行命令

ndk-build

目录结构会有如下变化。(红色方框内)

android studio C/C++ jni 编写以及调试方法

在进行调试之前在调用到C语言的函数处打一个断点,如图:

android studio C/C++ jni 编写以及调试方法

点击debug(红色框内)开始调试:

android studio C/C++ jni 编写以及调试方法

此时进入main目录下面执行如下命令。

ndk-gdb

之后会出现如下的信息:

GNU gdb (GDB) 7.6

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".

For bug reporting instructions, please see:

---Type to continue, or q to quit---

.

warning: Could not load shared library symbols for 86 libraries, e.g. libstdc++.so.

Use the "info sharedlibrary" command to see the complete listing.

Do you need "set solib-search-path" or "set sysroot"?

0xb6f0a794 in __futex_syscall3 ()

from /root/AndroidStudioProjects/NDK_Sample/app/src/main/obj/local/armeabi-v7a/libc.so

(gdb) l

执行“l”命令输入如下

1       #include

2

6       JNIEXPORT jstring JNICALL Java_com_example_root_ndk_1sample_MainActivity_getstringfromC

7         (JNIEnv *env, jobject obj)

8       {

9           int i = 0,j = 0,k = 0;

打一个断点在第十行命令如下:

b 10

在android studio 单步走,这个时候就会进入断点出,之后就可以执行gdb可以使用的命令进行调试了。

《完结》