原文路径:

    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项目目录如图:

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

添加如下代码在MainActivity类内

static {

System.loadLibrary("hello_jni");

}

public native  String getstringfromC();

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

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

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

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

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

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

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

编写Android.mk和Application.mk 放在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的目录配置文件为图中标红的地方。

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

ndk.dir=

配置

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

ndk{

moduleName"hello_jni"

}

在下图中

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

在如下图中:

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

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

运行结果

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

调试程序

在如下图中:

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

在下图中:

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

配置编译

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

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

ndk-build

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

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

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

此时进入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可以使用的命令进行调试了。

《完结》

android studio C/C++ jni 编写以及调试方法的更多相关文章

  1. 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀

    使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...

  2. 【Android Studio 小技巧】一键查看文件方法结构目录File Structure

    看源代码的时候,如果可以查看class中的所有方法,可以提高效率.Android Studio 中可以使用快捷键一键显示所有方法的目录. Mac: command + fn + F12 (在mac中的 ...

  3. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  4. android studio使用ndk,jni随记

    1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...

  5. Android Studio上NDK/JNI开发环境问题

    基础环境: 操作系统 —— Windows 7 Android Studio —— 1.5.1(android-studio-bundle-141.2456560-windows.exe) NDK — ...

  6. 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子

    Android 开发了一段时间,一方面 ,感觉不留下点什么.有点对不起自己, 另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客.废话不多说 ! 今天想搞一搞 ndk ...

  7. Android Studio 2.3 解决小米手机调试安装apk失败问题

    在开发者选项里面,拉到底,把miui优化选项去掉就好了. 参考资料 [问题反馈] Android Studio 2.3 在红米note3手机中 调试安装Apk失败

  8. 如何在Android Studio中导入JNI生成的.so库

    由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(0.86版 ...

  9. Android studio 3.1.3真机调试报错,no target device found

    Android studio 3.1.2 的 Android monitor 改为 Android profiler,直接点这个就可以真机调试,在手机安装相应app 如果不行,报错,"no ...

随机推荐

  1. Centos7 install Openstack Juno (RDO) (转载)

    原文地址:http://www.hdume.com/centos-7-0%E5%AE%89%E8%A3%85openstack/ 1.安装系统,Centos7镜像采用CentOS-7.0-1406-x ...

  2. Educational Codeforces Round 2 Edge coloring of bipartite graph

    题意: 输入一个二分图,用最少的颜色数给它的每条边染色,使得同一个顶点连的边中颜色互不相同. 输出至少需要的颜色数和任意一种染色方案. 分析: 证明不会,只说一下(偷瞄巨巨代码学到的)做法. 假设点的 ...

  3. 请求报文&响应报文

    转自黑马程序员视频教程

  4. 反转单词顺序 VS 左旋转字符串

    题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标垫符号和普通字母一样处理.例如输入字符串“I am a student.”,则输出“student. a am I ...

  5. loj2280 「FJOI2017」矩阵填数

    状压 dp.参考there #include <algorithm> #include <iostream> #include <cstring> #include ...

  6. FCKeditor自定义编辑区CSS样式

    在网站后台使用FCKeditor编辑器的时候,见到的效果可能并不完全是”所见即所得”的,因为如果在FCKeditor编辑区中使用了前台样式表中的样式,在编辑区中并不能把这些样式显示出来.解决这个问题的 ...

  7. 【转载】logistic回归

    原文地址:https://www.cnblogs.com/zichun-zeng/p/3824745.html 1. logistic回归与一般线性回归模型的区别: (1)     线性回归的结果变量 ...

  8. TOJ2712: Atlantis

    小数据求面积并 There are several ancient Greek texts that contain descriptions of the fabled island Atlanti ...

  9. [小技巧]使用set对列表去重,并保持列表原来顺序

  10. URAL 1099 Work scheduling 一般图的最大匹配 带花树算法(模板)

    R - Work scheduling Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...