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 ...
随机推荐
- HTTP认证之基本认证——Basic(二)
导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ...
- selenium2中的TestNg注解和数据驱动的简介及使用
TestNg常用注解介绍,先来张图: 先看一下,以上各个注释的运行次序: @Test 表示的意义: 1.表示示该方法是一个测试方法,在运行时,会自动的运行有@Test注脚的方法. 示例: @Be ...
- 各浏览器对 window.open() 的支持
原文地址
- luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版)
纪念一下我一晚上写了八遍AC自动机 这是加强版的: #include <iostream> #include <cstring> #include <cstdio> ...
- Vue简单了解
目录 1. 前端概览 2. 现代前端开发方式 3. MVVM开发核心 4. Vue核心 5. Vue优点 6. Vue难点 7. Vue与非Vue项目结合 8. Vue调试 9. Vue与SEO 今天 ...
- 触屏版轻量级分页插件jqPagination分享
说到HTML5和jquery上的分页问题,优秀的分页插件网上一抓一大把,然而同时适合兼容在Ipad和手机端的网站分页却不是特别多. 或许有人会说,触屏现在流行下拉底部后加载下一页内容,类似微博和QQ空 ...
- DS博客作业-05--树
1.本周学习总结 1.1思维导图 1.2学习体会 1.课堂上的知识也很难听懂,打代码就更难听懂了,真的需要不断练习代码. 2.在学习本章的内容中,一开始只是理解了概念,在真正做题中,一点思路都没有 ...
- OpenCV For Java环境搭建与功能演示
http://blog.csdn.net/jia20003/article/details/68944486
- mysql监控指标
1.最大连接数监控 show VARIABLES like "max_connections"; //最大连接数 show global status like 'Threads_ ...
- MGW——美团点评高性能四层负载均衡
转自美团点评技术博客:https://tech.meituan.com/MGW.html 前言 在高速发展的移动互联网时代,负载均衡有着举足轻重的地位,它是应用流量的入口,对应用的可靠性和性能起着决定 ...