[安卓开发笔记二]android Studio通过jni调用C++代码
[安卓开发笔记二]android Studio通过jni调用C++代码
16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的版本,2.2编写jni更加的方便,编译so使用cmakelists超爽,并且可以在c代码层断点调试,建议大家看完这个对安卓上jni有所了解后(2.2兼容此方法的jni编写,并且有了新的更强大的jni开发功能),去研究下2.2下jni编写哈,本人工作比较忙,闲下来会补上基于2.2版本的jni开发
自己需要用到android studio开发安卓项目,为了效率需要用jni来调用C++底层代码,网上关于这方面的资源十分匮乏,自己踩了很多坑,总算明白android studio是如何进行jni的调用,记录与此,贡献自己的一点力量,让后来人少踩坑
1、开发ide:
操作系统win7或者mac均可,这点没有关系哈
android studio(开发jni层代码,真机调试)
VS2013+大番茄插件(编写C++底层代码,这一步也可以直接在AS中完成,不过VS中调试C++代码会方便一点)
2、前期准备
安装android studio(一下简称AS),包括sdk和ndk的安装,注意安装过程中需要连google,可以改hosts或者翻墙,其中sdk在AS安装过程中会自动下载安装,主要用作安卓程序的编译工作。
NDK的安装:安装好AS后打开随便建一个空project,然互file—-other setting—–default project structure
最下面那行,没有的话按照上面的提示点击进去就会自动下载安装,NDK用作和调用C++代码等底层的工作。
安装完ndk要在projetc主目录下的gradle.properties最后加上
android.useDeprecatedNdk = true
附上google hosts地址:
googlehosts
安装VS2013和大番茄插件,这个我就不用详细说了。(自己直接在AS中编写C++代码就不需要进行VS的安装)
3、创建一个调用C++的Demo
打开AS创建一个新project
添加一个java类,专门声明jni的java接口函数
使用javah生成jni层头文件
在AS底部就有“Terminal”入口,然后进入如上图所示的目录
你的目录可能和我的不一样,简单地说,就是进入project下的java目录下,然后运行
javah -d ../jni com.example.xiaosheng.baoman1.TryJni
其中-d ../jni是指定生成的文件存放路径
com.example.xiaosheng.baoman1.TryJni是包括路径名的class类名,就是原本是这个:
com/example/xiaosheng/baoman1/TryJni.java
去掉后缀“.java”然后将‘/’替换成‘.’回车运行即可
就会生成对应的头文件
16年8月2号更新
16年8月2日更新
很多同学反应按照上述流程生成.h文件会提示找不到类文件,我也不清楚为嘛,在我的电脑win7或者mac上都是可以的,既然简单的方法不行,只好用稍微复杂一点的方法来生成了。
首先build以下整个项目(先build才会生成class文件),然后找到对应的class目录
然后在Terminal下进入到上图中的debug目录(进入此目录是为了方便classpath的指定,不然在外面指定很绕),然后执行
Javah –classpath ./ -d ../jni –jni com.XXX.XXX.jniTest
-classpath后面跟class所在的根目录,我们已经在这个目录所以class后面跟的是当前目录 ./
“-d ../jni”表示输出目录是上一层的jni目录下
“-jni”后面跟完整的包名+类名中间用“.”来连接
好了。
自己创建一个和.h文件同名的.cpp文件,将.h的内容复制大.cpp中有一点要注意在.h中生成的函数声明中只有参数类型,但是没有参数名称,在.cpp参数配上参数名
这里我演示一个调用第三方C++文件的函数的实现,所以我这里会写一个简单地C++代码,直接在AS中写,函数作用就是把一个float数组里的数字变成原来的两倍。
在jni层的cpp文件中实现数据类型的转换,调用C++完成功能,并向java层返回值
头文件别忘了包含
写好后在app文件夹下的build.gradle中编写ndk编译信息,ndk中的模块名要和你在jniTest中load的模块名保持一致
在主函数中写上测试程序
运行,
大功告成
生成的so,在这里
ps:android studio 中已经不用编辑android.mk和application.mk了,只用编辑grade即可,比eclipse方便很多!耶!
有问题可留言或者联系我邮箱291298162@qq.com
[安卓开发笔记二]android Studio通过jni调用C++代码相关推荐
- [安卓开发笔记一]Android开发配置opencv环境超详细教程
[安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...
- 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 参考文章: (1)[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 ( ...
- JNI开发笔记(一)--Android Studio安装与环境搭建
Android Studio安装与环境搭建 1. 前言 1.1 什么是JNI 1.2 JNI从零开发流程 2. Java环境配置 3. Android Studio安装 参考链接 1. 前言 工作中需 ...
- android中页面自动跳转,【学习笔记-安卓开发】8. Android Studio如何实现页面自动跳转(安卓学习系列博客)...
先将上上一篇博客中写在页面里的button以及相关代码删除 8.如何让页面自动跳转 在安卓开发中有一个非常重要的Handler 当我们输入Handler会出现两个提示,一个是os中的,一个是loggi ...
- Android NDK开发——Android studio使用JNI调用OpenCV处理图像
前言 这里要演示的是使用Android studio 做APP开发,使用JNI与C++交互的demo. 一.创建工程 1.创建一个Native C++工程. 2.命令工程和指定交互语言. 3.指定C+ ...
- Ue4.20 安卓开发配置及Android Studio 调试ue安卓工程
https://blog.csdn.net/wzqnn/article/details/81382721 开发所需环境: 1.UE4.20 2.Visual Studio 2017 v15.6或Vis ...
- android平台 arcgisr_《ArcGIS Runtime SDK for Android开发笔记》——Android Studio基本配置与使用...
1.前言 在上一篇文章<Android Studio下载与安装>里我们已经介绍了Android Studio的下载与安装步骤,这一篇我们将针对Android Studio的基本常见使用做一 ...
- Android Studio通过JNI调用NDK程序
NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些,安全性更高. 如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配 ...
- 安卓开发环境之 Android Studio
下载地址: http://developer.android.com/sdk/installing/studio.html
最新文章
- 搭建百度unit2.0测试代码(Java)
- ML 徒手系列 最大似然估计
- 方法引用_通过类名引用静态成员方法
- CSS 学习路线(一)元素
- vue中class绑定函数
- 计算机小键盘价格,带小键盘的笔记本电脑是多少寸
- .NetCore中EFCore的使用整理
- window 配置react native 、Android Studio环境
- 在java中产生随机数_在Java中产生随机数的两个方法
- 【转】vim ctag使用方法
- 3dsmax注册机不能用管理员身份运行的解决办法
- 地球人来源2【地底爬虫人访谈】
- 雾霾太大看不清?这里有份数据支持你一键去雾
- Proof of Stake-股权证明 系列3
- HDU-4622 Reincarnation (后缀自动机)
- 利用AutoSSH实现远程管理内网服务器
- 编程n的阶乘使用while语句_谷歌工程师新作,东北话编程
- 侯捷C++->组合与继承
- 以JavaScript连接mysql数据库为例说明通过ODBC连接数据库的通用方法
- 大话设计模式(下载)