码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-22 19:40:29      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

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”。
技术分享

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调试

开启调试 如图:① ②
技术分享

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

技术分享

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


参考:

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

标签:

原文地址:http://blog.csdn.net/sinat_15877283/article/details/51211546

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!