原文路径:

    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. The 2018 ACM-ICPC Chinese Collegiate Programming Contest Maximum Element In A Stack

    //利用二维数组模拟 #include <iostream> #include <cstdio> #include <cstring> #include <s ...

  2. NetBeans无法使用编码GBK安全地打开该文件

    今天用NetBeans打开包含路径里面的UTF-8编码的文件时,提示:NetBeans无法使用编码GBK安全地打开该文件. 后来在网上搜索找到了解决方案,原文地址:http://qdjinxin.it ...

  3. ogre3D学习基础10 -- 键盘控制与鼠标控制(直接控制)

    要实现键盘,鼠标对场景的控制,首先要帧监听,就是在每一帧的渲染前后对它进行操作.这里的操作没有用到缓冲区,只是简单的直接获取. 1.这些步骤和前面的一样,直接上代码,操作还是在createScene函 ...

  4. Selenium WebDriver-操作单选框

    先判断按钮是否已经被选中 如果没有被选中,才可以点击 #encoding=utf-8 import unittest import time import chardet from selenium ...

  5. “万恶”的break

    写这篇随笔主要是希望自己长点记性,break的作用是跳出当次循环,每次用break都有点忘记break后面的条件提前. 正常是这样: exit_flag=Falsefor i in range(10) ...

  6. Leetcode 440.字典序第k小的数字

    字典序第k小的数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字. 注意:1 ≤ k ≤ n ≤ 109. 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排 ...

  7. LaTeX Hierarchical Tables

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52692655 简单整理一下表格中的分级 ...

  8. 九度oj 题目1349:数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  9. HDU——4565So Easy!(矩阵快速幂)

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  10. 学习 WebService 第二步:知识准备——SOAP vs REST(wsdl和wadl区别)(转)

    原文地址:蓝精灵——默默争上游 笔记: SOAP和REST是两种实现WebService的主要方案(Web API部署REST貌似占了大半壁江山) REST Web Services 基于 HTTP ...