原文路径:

    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. Linux学习-检验软件正确性

    md5sum / sha1sum / sha256sum 目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机 制来处理,我们拿NTP 软件来检查看 ...

  2. clr(Windows 运行时和公共语言运行时)

    Windows 运行时   编译器使用 COM 引用计数机制来确定对象是否不再使用并可以删除. 因为从 Windows 运行时接口派生的对象实际上是 COM 对象,所以这是可行的. 在创建或复制对象时 ...

  3. js---post与get请求的区别

    request获取请求参数 最为常见的客户端传递参数方式有两种: 浏览器地址栏直接输入:一定是GET请求: 超链接:一定是GET请求: 表单:可以是GET,也可以是POST,这取决与<form& ...

  4. C#中的扩展方法详解

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类 ...

  5. 令人惊叹的Chrome浏览器插件

    Chrome是一个简洁而又高效(高性能,高消耗)的浏览器.接下来让我吐血推荐一些常用的Chrome插件. 日常插件 uBlock Origin ----- 比Adblock性能更高的广告插件. Adk ...

  6. Leetcode17--->Letter Combinations of a Phone Number(电话号码对应的字母的组合)

    题目: 给定一个数字字符串,返回数字所能代表的所有字母组合: 举例: Input:Digit string "23" Output: ["ad", " ...

  7. EM算法简易推导

    EM算法推导 网上和书上有关于EM算法的推导,都比较复杂,不便于记忆,这里给出一个更加简短的推导,用于备忘. 在不包含隐变量的情况下,我们求最大似然的时候只需要进行求导使导函数等于0,求出参数即可.但 ...

  8. HDU2013 蟠桃记【递推】

    Problem Description 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少 ...

  9. 【bzoj3210】花神的浇花集会 旋转坐标系

    题目描述 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花 ...

  10. 如何在 Windows 上 使用 ONLYOFFICE 协作编辑文档

    ONLYOFFICE Document Server提供文档协作的服务功能,支持Word,Excel和PowerPoint的协作.但是这里告诉我们,需要进行文档管理和存储的二次开发. Please n ...