android studio C/C++ jni 编写以及调试方法
原文路径:
http://blog.sina.com.cn/s/blog_ad64b8200102vnxl.html
目录
开发环境
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 编写以及调试方法的更多相关文章
- 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀
使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...
- 【Android Studio 小技巧】一键查看文件方法结构目录File Structure
看源代码的时候,如果可以查看class中的所有方法,可以提高效率.Android Studio 中可以使用快捷键一键显示所有方法的目录. Mac: command + fn + F12 (在mac中的 ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
- android studio使用ndk,jni随记
1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...
- Android Studio上NDK/JNI开发环境问题
基础环境: 操作系统 —— Windows 7 Android Studio —— 1.5.1(android-studio-bundle-141.2456560-windows.exe) NDK — ...
- 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子
Android 开发了一段时间,一方面 ,感觉不留下点什么.有点对不起自己, 另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客.废话不多说 ! 今天想搞一搞 ndk ...
- Android Studio 2.3 解决小米手机调试安装apk失败问题
在开发者选项里面,拉到底,把miui优化选项去掉就好了. 参考资料 [问题反馈] Android Studio 2.3 在红米note3手机中 调试安装Apk失败
- 如何在Android Studio中导入JNI生成的.so库
由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个.so库文件之后,eclipse工具就会自动把这些库导入到apk中.而Android Studio目前为止(0.86版 ...
- Android studio 3.1.3真机调试报错,no target device found
Android studio 3.1.2 的 Android monitor 改为 Android profiler,直接点这个就可以真机调试,在手机安装相应app 如果不行,报错,"no ...
随机推荐
- LRESULT CALLBACK WndProc 窗口程序的 重点
LRESULT CALLBACK WndProc Windows程序所作的一切,都是回应发送给窗口消息处理程序的消息.这是概念上的主要难点之一,在开始写作Windows程序之前,必须先搞清楚. 窗口消 ...
- JDK并发基础与部分源码解读
之前写的一个ppt 搬到博客来
- verilog写的LCD1602 显示
在读本文之前,请先阅读 LCD1602 的 datasheet(百度到处都是) ,熟悉有关的11条指令集. LCD1602的11个指令集链接 http://www.cnblogs.com/aslmer ...
- NVIDIA NVML Driver/library version mismatch
sudo rmmod nvidia_drm sudo rmmod nvidia_modeset sudo rmmod nvidia_uvm sudo lsof /dev/nvidia* confirm ...
- hdu3667
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 九度oj 题目1392:排序生成最小的数
题目描述: 还记得陈博是个数字完美主义者么?^_^....这次,他又闹脾气了!我们知道计算机中常常要使用数组保存一组数字,但是今天他就要求把数组里的所有数字组成一个,并且这个数字是这些数字所能组成的所 ...
- POJ 2355 Railway tickets
Railway tickets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2472 Accepted: 865 De ...
- mysqld got signal 11
问题发生背景 问题实例之前使用的是percona server,是安装pmm镜像自带的数据库,之后通过mysqldump迁移到了MySQL server,目前是只有有pmm server 访问pmm库 ...
- iOS学习笔记44-Swift(四)枚举和结构体
一.Swift的枚举 枚举是一系相关联的值定义的一个公共的组类型,同时能够让你在编程的时候在类型安全的情况下去使用这些值.Swift中的枚举比OC中的枚举强大得多, 因为Swift中的枚举是一等类型, ...
- 【Luogu】P3047附近的牛(树形DP)
题目链接 树形DP,设f[i][j]是当前在i点,j步之内有多少牛.从相邻点to的f[to][j-1]转移而来,减去重复计算即可. #include<cstdio> #include< ...