前言

这边Android作为日常记录,虽然破坏了文章队形~   最近人工智能挺火的,也稍微了解了一些库,比如关于视觉库openCV。要在安卓下调用这些C/C++库,需要用到JNI开发,在此把过程分享一下。

概念

JNI:Java Native Interface的缩写。提供了API供java和其他语言通信,主要是C/C++。

NDK:Native Development Kit,是 Android的一个工具开发包 ,快速开发C、 C++的动态库,并自动将so文件和应用一起打包成 APK。

JNI和NDK关系:在Android中通过NDK,使用JNI与本地Java代码交互。

分析

分析要做的事情

1、配置NDK环境。(这里用的安卓开发工具是Android studio,as的配置就不细说了)

2、编写C/Cpp文件。

3、编译生成so文件供原生安卓调用。

4、编写本地native方法。

配置NDK环境

方式一:在线配置

  • 打开sdk manager
  • 点击sdk tools
  • 勾选CMake、LLDB、NDK,点击install。

慢慢等吧......顺利的话下载完点击APPLY--->OK,那么恭喜。如果提示下载失败,很大可能是没掌握科学上网=。=!!,此时可以试试方式二。

方式二:离线安装

  • 下载NDK离线安装包并解压,修改文件夹名字为ndk-bundle,放在你安装Android studio的sdk目录下,重启android studio就可以了。(推荐下载地址AndroidDevTools.com,资源较为干净放心)
  • 不想放在sdk目录下的可以解压到任何一个盘,点击android studio --> file --> project structure --> SDK location --> Android NDK Location设置ndk目录,重启android studio。

关联NDK与项目:

1、gradle --> local.properties -->添加配置 ndk.dir=/Users/susan/Android/sdk/ndk-bundle。  (一般情况下这句是自动加上的,假如你的ndk在sdk目录下)

2、gradle --> gradle.propertiess -->添加配置 android.useDeprecatedNdk=true。 (一般情况下也是自动加的)

3、在gredle.build中添加ndk节点。

4、创建本地ImgFun.cpp文件,注意位置位于jni文件夹中。

# include <jni.h>
# include <stdio.h>extern "C"
{/*表示返回一个字符串  方法名称格式:Java_包名_类名_方法名(这个方法名java要调用的)*参数*1. JNIEnv:代表了VM里面的环境,本地的代码可以通过该参数与Java代码进行操作
   *2. obj:定义JNI方法的类的一个本地引用(this)
  */ 

    JNIEXPORT jstring JNICALL Java_com_hong_demo_MyNative_getInfo(JNIEnv *env, jobject obj ){         return env -> NewStringUTF("Hello,树先生!");     } }

5、jni文件夹下创建Android.mk文

LOCAL_PATH :=  $(call my-dir)
// 设置工作目录,而my-dir则会返回Android.mk文件所在的目录
include $(CLEAR_VARS)
// 清除几乎所有以LOCAL——PATH开头的变量(不包括LOCAL_PATH)
LOCAL_MODULE :=  hello_jni
// 设置模块的名称,即编译出来.so文件名
// 注,要和上述步骤中build.gradle中NDK节点设置的名字相同
LOCAL_SRC_FILES :=  test.cpp
// 指定参与模块编译的C/C++源文件名
include $(BUILD_SHARED_LIBRARY)
// 指定生成的静态库或者共享库在运行时依赖的共享库模块列表。

6、jni文件夹下创建Application.mk文件

APP_ABI := armeabi armeabi-v7a
// 最常用的APP_ABI字段:指定需要基于哪些CPU平台的.so文件
// 常见的平台有armeabi x86 mips,其中移动设备主要是armeabi平台
// 默认情况下,Android平台会生成所有平台的.so文件,即同APP_ABI := armeabi x86 mips
// 指定CPU平台类型后,就只会生成该平台的.so文件,即上述语句只会生成armeabi平台的.so文件

7、编译生成so文件。控制终端进入jni目录,执行 ndk-build 命令即可。

8、本地调用so文件中的方法。

// 步骤1:加载生成的so库文件// 注意要跟.so库文件名相同static {System.loadLibrary("ImgFun");}// 步骤2:定义在JNI中实现的方法public native String getInfo();

9、整体代码结构

                

最后说明,有几点参考的文章: https://www.jianshu.com/p/38859f881888   质量和画风都非常赞呢~

转载于:https://www.cnblogs.com/hongdiandian/p/9025089.html

Android之NDK环境配置+JNI开发+so文件编译相关推荐

  1. Android Studio NDK环境配置及JNI使用方法

    1.前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.N ...

  2. Android新版NDK环境配置(免Cygwin)

    本菜鸟在查阅了很多文章,又是去折腾cygwin之类的,虽然可以编译出so文件,但运行项目却有很多问题.当发现最新的ndk不需要cygwin的时候,跪了(orz). 现在进入正题. 使用工具: adt- ...

  3. NDK 环境配置看这篇就够了!

    JNI-Android Studio下的 NDK 环境配置 JNI与NDK的理解 JNI 什么是JNI呢? 为什么用JNI呢? 怎么学JNI呢? NDK 什么是NDK呢? 为什么用NDK呢? 怎么学N ...

  4. android ndk mac安装成功,Mac下Android Studio NDK 环境搭建并运行

    本文包括两部分. 一,NDK环境配置 二,NDK项目运行. 2,下载完成之后,在cmd命令中解压文件. (1) cd  命令进入下载后ndk存放的目录  cd /Users/talon/Desktop ...

  5. android eclipse的环境配置

    前几天,公司让我把代码与别的公司的代码合并,我用的是android studio开发,而那个公司是用的eclipse开发,所以自己只好搭建eclipse的环境后,把修改的内容添加到eclipse工程, ...

  6. android ppt sdk,Android SDK及环境配置.ppt

    Android SDK及环境配置 Android SDK及环境配置 沈青海 sunxml@ Copyright 2008-2009 Farsight.All rights reserved. SDK ...

  7. delphi android jni,Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用...

    一.Android平台编程方式: 1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现) 2.自从ndk r5发布以后,已经允许完全用C/C ...

  8. 深度学习自学(六):Android人脸检测环境配置等相关问题

    Android人脸检测环境配置等相关问题 1.android studio 包查找不到 2.android studio 快捷键 搜索类的快捷键是Ctrl+N,搜索以后点击结果,可以跳到相应类的文件. ...

  9. 一步一步开发sniffer(Winpcap+MFC)(一)工欲善其事,必先配环境——配置winpcap开发环境

    0.说在前面的话 1) 本文将以一个初学者的角度,一步一步几乎是从0开始讲述如何完成一个基于winpcap+MFC的sniffer(嗅探器)当然我指的"0"并不是指连编程都不会,如 ...

  10. 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解

    学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...

最新文章

  1. 比特币现金是否失去了去中心化
  2. 清华团队将Transformer用到3D点云分割上后,效果好极了丨开源
  3. c语言 判断一个图是否全连通_C语言:程序运行流程图与顺序结构语句
  4. JZOJ 5941. 【NOIP2018模拟11.01】乘
  5. datatables 配套bootstrap样式使用小结(2) ajax篇
  6. 一键伪装成 Windows 10:Kali Linux 2019.4 版本推出 “Undercover” 模式
  7. jar包的生成及运行
  8. php 图像居中裁剪函数,php中自定义图像居中裁剪函数实现的代码案例
  9. 2022年上半年系统集成项目管理工程师上午真题及答案解析
  10. 从0开发《工程测绘大师》小程序之6°带中央子午线计算篇(八)
  11. PS基础全讲和使用技巧(二)
  12. 《C#之集训1-20121019c#基础》
  13. iOS接入招商银行一网通
  14. 纽约大学历年本科生录取数据分析
  15. 如何从Google Play下载应用到电脑
  16. 2-直观体验OAuth2
  17. 复旦大学计算机专业好还是浙大好,复旦大学和浙江大学,哪个更强一点?很多人都猜错了...
  18. Resource file and Source file
  19. html 调用微信扫一扫,微信开发之调用扫一扫接口
  20. aardio工具提示控件的简单实例

热门文章

  1. Lucene的各中文分词比较
  2. 《期权、期货及其他衍生产品》读书笔记(第四章:利率)
  3. 从Sbo 2005B维护助手软件说说SBO人的四重境界
  4. 基因重组-冲刺日志(第四天)
  5. Linux虚拟机快速搭建RabbitMQ(解压版)完整流程(简单明了、不亲测能写这么多)
  6. 01、3dB双分支定向耦合器
  7. CSS 基础教程:CSS 教程:什么是 CSS?
  8. php实现幻灯片效果,flash幻灯片切换效果代码,超简单超实用
  9. u盘如何安装xp和linux,怎样从U盘安装Windows XP?
  10. NPOI Word 换行 【XWPFDocument】