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 例子
- 百度开放平台提供的定位服务;
- 搜索服务 ;
- LBS 服务
- 推送服务的Android SDK
2. 环境搭建
2.1 配置NDK
1. 安装NDK:① file—>setting / 或如图 “标志①”; ②选择 “Android SDK”;③ 点开 “SDK Tools” ; ④勾选“NDK”等待安装,NDK的默认安装目录“~xx\sdk\ndk-bundle
”。
2. 为项目配置NDK环境: 套路一致,请看图中:①②③④
2.2 gradle-experimental plugin插件
Plugin Version
与Gradle 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 |
2.3 LLDB(debug C++)
- 安装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