原文路径:

    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. csapp-15213错误修正18-10-28

    1.p229 练习题3.15 b.答案错误,应为400419

  2. HDU 4812 D Tree 树分治

    题意: 给出一棵树,每个节点上有个权值.要找到一对字典序最小的点对\((u, v)(u < v)\),使得路径\(u \to v\)上所有节点权值的乘积模\(10^6 + 3\)的值为\(k\) ...

  3. HDU 5489 Removed Interval DP 树状数组

    题意: 给一个长度为\(N\)的序列,要删除一段长为\(L\)的连续子序列,问所能得到的最长的\(LIS\)的长度. 分析: 设\(f(i)\)表示以\(a_i\)结尾的\(LIS\)的长度,设\(g ...

  4. HDU 5379 树形DP Mahjong tree

    任意一棵子树上节点的编号连续,每个节点的所有二字节点连续,求编号方案的总数. 稍微分析一下可知 每个节点的非叶子节点个数不能多于两个,否则这个子树无解,从而整棵树都无解. 每棵子树将所有节点按照编号从 ...

  5. day01_09.你已学会编程

    目前你已经学会编程: 学会变量,运算,控制,你就学会了编程,我擦?真的,假的? 1.打印1-100,自己试试看呗 <?php $num = 1; while($num<=100){ ech ...

  6. python-网络编程-03

    首先我们可以看下可以最简单的交互性的服务端和客户端程序 server import socket def main(): sock = socket.socket(socket.AF_INET,soc ...

  7. CentOS 6.3下安装腾达USB无线网卡遇到的问题及解决方法

    前言:centos 6.3 下,安装腾达W311M型号Usb无线网卡的步骤.究竟折腾及同事的先前帮助,后来搞定. centos6.3 为64位.安装步骤及顺序: 1.在当前版本下安装W311M usb ...

  8. NOJ——1669xor的难题(详细的树状数组扩展—异或求和)

    [1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...

  9. NOJ——1649Find Sum(二分查找)

    [1649] Find Sum 时间限制: 1000 ms 内存限制: 65535 K 问题描述 This problem is really boring. You are given a numb ...

  10. P2622 关灯问题II (状态压缩,最短路)

    题目链接 Solution 这道题算是很经典的状压问题了,好题. 考虑到 \(n\) 的范围仅为 \(10\) , 那么也就是说所有状态压起来也只有 \(1024\) 种情况. 然后我们发现 \(m\ ...