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

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

开启调试 如图:① ②

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

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



参考:

时间: 2024-10-29 19:09:50

JNI开发(1)——概述、环境搭建、必要知识点的相关文章

Android jni开发资料--NDK环境搭建

谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了.只需要为Eclipse Android工程添加一个Builders,而为Eclipse配置的builder,其实就是在执行Cygwin,然后传递ndk-build作为参数,这样就能让Eclipse自

史上最易懂的Android jni开发资料--NDK环境搭建

谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了.只需要为Eclipse Android工程添加一个Builders,而为Eclipse配置的builder,其实就是在执行Cygwin,然后传递ndk-build作为参数,这样就能让Eclipse自

iOS开发项目-01环境搭建

iOS开发项目-01环境搭建 一.基本过程 1.新建一个项目 (1)删除storyboard (2)在配置界面中,把main  删除,手动设置 2.准备素材 图片素材如下: 这个项目是模仿新浪,实现一个山寨的新浪微博系统,新版本的系统中已经放弃了非视网膜屏幕. 说白了,这种情况下,如果手机是3.5英寸的ios7系统,则看不到该启动动画. 设置方法,右键单击show in finder,修改json文件. Contents.json,对文件进行修改,让系统启动画面对3.5英寸的ios7系统提供支持

Tiny4412 开发板 编译环境搭建

/************************************************************************************** * Function     : Tiny4412 开发板 编译环境搭建 * Create Date  : 2016/04/04 * Author       : NTSK13 * Email        : [email protected] * Copyright    : 欢迎大家和我一起交流学习,转载请保持文章的

Android NDK开发之从环境搭建到Demo级十步流

写在正文之前: 几个月没有更新博客,感觉有点生疏了,所以说不能断,一断人就懒. 其实这几个月也并不是什么事也没有做,俺可是时刻想着今年的任务呢,10本书,30篇博文-,这几个月间断性的也是在学习中,学H5,学设计模式,以及NDK JNI开发等等. 学习JNI主要是因为公司有一些COCOS游戏需要添加计费点,而又没有真正的游戏开发人员,这个重任就落到我身上了,然后就是各种虐,一虐到底,苦不堪言,这种虐并不是学习技术的虐,而是一款游戏用于N种计费点,不停的改改改,那个需求这个需要的,然后你就等着被玩

Java第一章----Java概述+环境搭建

写在前面的话: Java基础的东西看过好几遍,但是过一段都就忘记了,所以这次我决定花费一些时间整理一个系列博客供以后方便查阅.此系列根据Java编程思想+Java核心技术两本书整理而来,这两本书也是我极力推荐大家看的两本,因为每次看都有不同的收获,两本横向看相辅相成定会让你受益匪浅,好了敬请期待吧! 第一节:Java简介 Java是由Sun公司在1995年5月推出的一种面向对象的编程语言,极好的实现了面向对象理论,更加注重对象的本身不用太关注事件的过程. Java通过Java编程语言+Java类

IDEA开发spring的环境搭建

摘要: 主要讲解使用 IDEA 开发 Spring MVC 的环境搭建,Maven的简单教学. 参考1:https://my.oschina.net/gaussik/blog/385697 参考2:http://www.cnblogs.com/Leo_wl/p/4459274.html 前言 本文是本人开始使用 IDEA 的开端,从 java 框架开始,安装参考以上文章. 一.相关环境 - JDK 1.8.0_45 - Maven 3.3.9 - Tomcat 8.5.12 - MySql 5.

YII2的restfulAPI开发入门(1)-环境搭建

1. 准备工作 Web server: apache 或者 nginx Yii2版本: basic版本 数据库: mysql 2. 访问Yii2的web目录 ⑴ 测试Yii2环境 web/目录下创建info.php文件,文件代码为:echo phpinfo(); 输入 127.0.0.1/info.php后就能访问到 /web/info.php. 说明Yii2环境搭建成功. 3. 参数配置 ⑴ web.php (1.1) 'cookieValidationKey' => '2e268962384

10分钟入门微信小程序开发:从环境搭建到开发出第一个程序。

小程序简介 小程序是一种不需要下载安装即可使用的快速应用,它实现了应用“触手可及”的操作:用户扫一扫或搜一下即可打开应用,完全不需要安装,因此小程序不仅可提高的用户的应用体验,也方便应用的传扩散. 本文带大家快速入门小程开发,了解从环境搭建到开发出一个简单hello world程序,从而上手小程序开发,让你快速成功小程序开发人员.之后,想开发什么样的小程序,就可以自己研究和努力了. 下面,是循序渐经的步骤: ?1.注册小程序 在开发之前,当然需要先注册一个小程序账号. 进入“微信公众平台”进行注

Spring3.x企业应用开发实战1.环境搭建

书中搭建得环境是spring3.x,我选择得是spring 4.2.5.RELEASE系列得jar包搭建.记录下其中遇到得问题 1.jar包选择: spring4.x中没有spring-asm 和 spring web-servlet这两个jar包,因为 asm这个包已经在spring4.x得core包中包含 web-servlet 在spring4.下得webmvc中包含 2.环境搭建至书上得30页之后,用junit测试一直是空指针异常,在检查applicationContext.xml中确保