[安卓开发笔记二]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++代码相关推荐

  1. [安卓开发笔记一]Android开发配置opencv环境超详细教程

    [安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...

  2. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    [走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 参考文章: (1)[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 ( ...

  3. JNI开发笔记(一)--Android Studio安装与环境搭建

    Android Studio安装与环境搭建 1. 前言 1.1 什么是JNI 1.2 JNI从零开发流程 2. Java环境配置 3. Android Studio安装 参考链接 1. 前言 工作中需 ...

  4. android中页面自动跳转,【学习笔记-安卓开发】8. Android Studio如何实现页面自动跳转(安卓学习系列博客)...

    先将上上一篇博客中写在页面里的button以及相关代码删除 8.如何让页面自动跳转 在安卓开发中有一个非常重要的Handler 当我们输入Handler会出现两个提示,一个是os中的,一个是loggi ...

  5. Android NDK开发——Android studio使用JNI调用OpenCV处理图像

    前言 这里要演示的是使用Android studio 做APP开发,使用JNI与C++交互的demo. 一.创建工程 1.创建一个Native C++工程. 2.命令工程和指定交互语言. 3.指定C+ ...

  6. Ue4.20 安卓开发配置及Android Studio 调试ue安卓工程

    https://blog.csdn.net/wzqnn/article/details/81382721 开发所需环境: 1.UE4.20 2.Visual Studio 2017 v15.6或Vis ...

  7. android平台 arcgisr_《ArcGIS Runtime SDK for Android开发笔记》——Android Studio基本配置与使用...

    1.前言 在上一篇文章<Android Studio下载与安装>里我们已经介绍了Android Studio的下载与安装步骤,这一篇我们将针对Android Studio的基本常见使用做一 ...

  8. Android Studio通过JNI调用NDK程序

    NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高些,安全性更高. 如果你在Eclipse+ADT下开发过NDK就能体会到要么是配置NDK还要下载Cygwin,配 ...

  9. 安卓开发环境之 Android Studio

    下载地址: http://developer.android.com/sdk/installing/studio.html

最新文章

  1. 搭建百度unit2.0测试代码(Java)
  2. ML 徒手系列 最大似然估计
  3. 方法引用_通过类名引用静态成员方法
  4. CSS 学习路线(一)元素
  5. vue中class绑定函数
  6. 计算机小键盘价格,带小键盘的笔记本电脑是多少寸
  7. .NetCore中EFCore的使用整理
  8. window 配置react native 、Android Studio环境
  9. 在java中产生随机数_在Java中产生随机数的两个方法
  10. 【转】vim ctag使用方法
  11. 3dsmax注册机不能用管理员身份运行的解决办法
  12. 地球人来源2【地底爬虫人访谈】
  13. 雾霾太大看不清?这里有份数据支持你一键去雾
  14. Proof of Stake-股权证明 系列3
  15. HDU-4622 Reincarnation (后缀自动机)
  16. 利用AutoSSH实现远程管理内网服务器
  17. 编程n的阶乘使用while语句_谷歌工程师新作,东北话编程
  18. 侯捷C++->组合与继承
  19. 以JavaScript连接mysql数据库为例说明通过ODBC连接数据库的通用方法
  20. 大话设计模式(下载)

热门文章

  1. 10月2号陪同学买笔记本的经历
  2. opencv PCA 求轮廓的形心
  3. 【机器学习应用】机器学习之无监督学习
  4. 顶级技术公司的CEO是如何看待AI的?
  5. 运维思索:cmdb与zabbix监控系统的融合
  6. 员工和老板的差距不只是能力,还有战略思维
  7. ADM 使用vm10.15.0虚拟机安装macOS10.14
  8. 金融行业用户画像六大维度
  9. win7 mysql 卸载不干净,win7系统彻底删除mysql的方法教程
  10. 女性计算机科学家比例,为何女性IT工作者占比低