JNI开发(1)——概述、环境搭建、必要知识点

来源:互联网 发布:淘宝店铺app端 编辑:程序博客网 时间:2024/06/06 13:57

JNI开发(1)——概述、环境搭建、必要知识点

JNI开发(2)——开发流程实战


同学们,笔者作为一名资深老司机,向大家郑重承诺:“文章的最后会有福利发放,请自备纸巾!!!”

以下是整个 “JNI开发”的主题大纲,由于篇幅的限制,本文就简单的介绍一下关于JNI开发的一些准备工作:概念环境必要知识
这里写图片描述

1. 关于JNI

1.1 概述

来自 维基百科!!!
JNI允许用本地代码来解决纯粹用Java编程不能解决的平台相关的特性。也用于改造已存在的其它语言写的应用程序,供Java程序访问。许多使用了JNI的标准库提供了文件I/O与其它功能。标准库中性能敏感或平台敏感的API实现允许所有Java应用程序安全且平台独立地访问这些功能。
JNI框架使得本地方法可以访问Java对象,就如同Java程序访问这些本地对象。本地方法可以创建Java对象,然后检查、使用这些对象执行任务。本地方法也可以检查并使用由Java程序创建的对象。
Java开发人员称JNI为逃生门(”escape hatch”),因为JINI允许增加标准Java API不能提供的功能。也可以用于时间关键的计算或者如解复杂数学方程,因为本地方法的运算比JVM更快。[2] 也可以在安卓上重用已存在的C/C++编写的库。
这里写图片描述

1.2 使用场景

  • 大部分物联网和智能家居产品;
  • 设备只提供了 C 的接口情况下;
  • 安全性要求高,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大;
  • 便于移植,用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

1.3 例子

  1. 百度开放平台提供的定位服务;
  2. 搜索服务 ;
  3. LBS 服务
  4. 推送服务的Android SDK

2. 环境搭建

2.1 配置NDK

1. 安装NDK: file—>setting / 或如图 “标志①”; 选择 “Android SDK”; 点开 “SDK Tools” ; 勾选“NDK”等待安装,NDK的默认安装目录“~xx\sdk\ndk-bundle”。
安装NDK

2. 为项目配置NDK环境: 套路一致,请看图中:①②③④

这里写图片描述

2.2 gradle-experimental plugin插件

  • Plugin VersionGradle Version 所对应关系
Plugin Version Gradle Version 0.1.0 2.5 0.2.0 2.5 0.3.0-alpha3 2.6 0.4.0 2.8 0.6.0-alpha1 2.8 0.6.0-alpha5 2.10 0.7.0-alpha1 2.10

gradle-experimental相关的博客
gradle-experimental原网站

2.3 LLDB(debug C++)

  1. 安装LLDB: file—>setting / 或如图 “标志①”; 选择 “Android SDK”; 点开 “SDK Tools” ; 勾选“LLDB”等待安装

这里写图片描述

Android Studio NDk调试(基于gradle-experimental插件与LLDB)

到这边我们开发环境与调试环境就已经搭建好了…接下来我们去了解一下我们开发过程中需要的知识吧~~~

3. 开发知识

3.1 java命令

  • javac 命令:将.java源文件编译成.class字节码文件
    javac src/com/wenld/jnidemo/HelloWorld.java -d ./bin
    -d 表示将编译后的 class 文件放到指定的目录下

  • javah -jni 命令:根据class字节码文件生成.h头文件
    javah -jni -classpath ./bin -d ./jni com.wenld.jnidemo.HelloWorld
    默认生成的.h头文件名为:com_study_jnilearn_HelloWorld.h(包名+类名.h),也可以通过-o参数指定生成头文件名称:
    javah -jni -classpath ./bin -o HelloWorld.h com.wenld.jnidemo.HelloWorld

  • classpath:类搜索路径,这里表示从当前的 bin 目录下查找
  • d:将生成的头文件放到当前的 jni 目录下
  • o:指定生成的头文件名称,默认以类全路径名生成(包名+类名.h)

3.2 C++语法

3.2.1 基本类型

Java类型 本地类型 说明 boolean jboolean 无符号,8位 byte jbyte 无符号,8位 char jchar 无符号,16位 short jshort 有符号,16位 int jint 有符号,32位 long jlong 有符号,64位 float jfloat 32位 double jdouble 64位 void void N/A


太多了 请参考:http://yanbober.github.io/2015/02/16/android_studio_jni_2/

3.3 LLDB调试

开启调试 如图:① ②
这里写图片描述

———————————————–福利———————————————–

三位帅哥跑马拉松的英姿

三位帅哥跑马拉松的英姿,猜猜哪个是我?


参考:

  • Android Studio使用gradle-experimental构建NDK工程
  • 一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
  • Android Studio使用新的Gradle构建工具配置NDK环境:
  • Android Studio 1.5 RC1搭建NDK开发环境
  • JNI开发入门教程
  • Android NDK API
  • Android NDk 开发简易教程
  • 使用Android Studio 1.3 版本进行NDK开发
  • IDEA 及 GRADLE 使用总结
  • JNI 开发流程
  • Android studio配置本地Gradle
  • Android Studio NDk调试(基于gradle-experimental插件与LLDB)
  • JNI资料
  • github:https://github.com/googlesamples/android-ndk
1 0
原创粉丝点击