Android-JNI的简单使用

什么是JNI那?

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。

这是百度百科上面的原话,专家的介绍,大家都懂的。下面有一张关于JNI的知识总结图,更利于大家对JNI的理解

使用JNI需要先配置NDK 就像配置SDK一样,至于NDK是怎么去配置的,因为时间有限,就请大家自行去百度,我这里就不多说了。

理论上面的知识就到这里,前人已经替我们总结的非常好了,如何在前人的理论基础上面去实现它,写出第一个自己的JNI项目才是本文想去说的。

OK Come On;



创建一个项目 HelloJni ,为layout创建一个点击事件 onButtonClick

然后在Activity中创建本地方法

然后就该创建我们的C语言方法了。右击我们的项目app->New->Folder->JNI Folder

这样就生成了一个专门用来存放JNI文件的文件夹

在jni文件夹中创建一个C语言文件Hello.c

Hello.c内部代码

然后在jni文件夹中创建一个Android.mk文件如图,用于进行NDK的编译

LOCAL_MODULE为编译之后生成的文件名称

LOCAL_SRC_FILES为被编译的文件名称

这里要注意,默认的情况下JNI是不支持 X86和Mips的CUP架构的,所以我们需要手动的去添加支持。

创建一个Application.mk的文件,如图

表示支持所有的CPU架构,其实主要就是X86与Mips架构

然后就需要使用NDK去编译项目

打开控制台 cd到该项目的jni文件夹中,使用ndk-build指令(注意我这里是mac os,如果是windows 或者 linux 使用的指令为 ndk-build.cmd)如图所示

这一步完成之后,会发现项目里面多了一些东西

最后我们需要在Java代码之中去引用这个libs

运行代码点击按钮就能简单的实现了一个 Hello JNI 的Toast

源码地址:http://download.csdn.net/detail/u011068996/9061135



站在巨人的肩膀上,我们才能看得更远

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-17 04:41:36

Android-JNI的简单使用的相关文章

Android—JNI调用简单实例解析

转自:http://www.cnblogs.com/sevenyuan/p/4202759.html 感谢原作者的细心整理! 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni;  public class TestJNI {         public native boolean Init();         public native int Add(int x, int y);        

android JNI 简单demo(2)之JNI demo 编写

android JNI 简单demo(2)之JNI demo 编写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25559013 二.JNI 基本要素: 1.编写 含native 方法的java文件. 2.把该文件用javah 生成 Cygwin 编译库时要用到的头文件,既*.h 文件. 3.编写*.c 文件,在*.c文件中,实现 *.h 中的方法. 4.编写mk文件. 5.配置NDK环境. 6.用Cygwin

Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密

#include "aes.h" #include "modes.h" #include "e_os2.h" #include "aes_locl.h" #include "opensslconf.h" AES_KEY aes; //aes cbc模式加解密用到的向量 unsigned char iv[AES_BLOCK_SIZE]; for (i = 0; i < AES_BLOCK_SIZE; i

【转】android JNI

原文网址:http://jinguo.iteye.com/blog/696185 Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Byt

Android jni 编程入门

本文将介绍如何使用eclipse和ndk-build来编写一个基于Android4.4版本的包含有.so动态库的安卓程序. 前提是已经安装和配置好了诸如SDK,NDK等编译环境.下面开始编程! 1 程序逻辑 我们要编写的程序包含两部分:java部分--负责界面和调用JNI native函数:JNI native 部分--负责native函数的具体实现(本文使用C语言). native 函数伪代码如下: ? 1 2 3 4 5 6 7 8 /* funtion: 传入两个整形变量,计算他们之和 r

Android JNI初体验

开始接触Android JNI层面的内容,推荐一本不错的入门级的书<Android的设计与实现:卷一>,这两天看了一下关于Java层和Native层函数映射的章节,加深对JNI的理解. 先是写了一个非常简单的计算器,关键的运算放在Native层实现,然后把运算的结果返回到Java层,写这个的时候还是自己手动建jni文件夹,javah的命令行,写makefile文件,用ndk-build命令行来编译,后来发现要调试C代码了,才发现高版本的ndk环境已经全都集成好了,编译,运行,调试甚至和VS差不

超全Android JNI&NDK编程总结

由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK学习笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签名等,便于查阅相关资料.文末相关参考资料比较适合刚接触或者不熟悉Android NDK开发的朋友参阅. 常用命令 javac 编译java源文件生成.class文件 由于JNI对应的头文件由javah工具根据对应的.class文件生成,所以在进行JNI编程之前,写好Java代码后需要先编译,在使用ja

Android JNI之数据类型

JNI中数据类型的意义在于桥接Java数据类型与C数据类型. 简单数据类型: Java Type Native Type Description boolean jboolean unsigned 8 bits byte jbyte signed 8 bits char jchar unsigned 16 bits short jshort signed 16 bits int jint signed 32 bits long jlong signed 64 bits float jfloat

android JNI调用(转)

Android jni开发资料--NDK环境搭建 android开发人员注意了 谷歌改良了ndk的开发流程,对于Windows环境下NDK的开发,如果使用的NDK是r7之前的版本,必须要安装Cygwin才能使用NDK.而在NDKr7开始,Google的Windows版的NDK提供了一个ndk-build.cmd的脚本,这样,就可以直接利用这个脚本编译,而不需要使用Cygwin了.只需要为Eclipse Android工程添加一个Builders,而为Eclipse配置的builder,其实就是在

Android JNI 入门

Android JNI (Java Native Interface)就是为了实现java 与其他语言相互调用的语言.当然在Android就是为了跟C,C++的调用.在Linux ,Mac中Java最后调用的就是.so的文件,在Window中就是.dll文件. 那么Java到C怎么对应起来?调用Java的哪个方法就是C中的哪个方法呢?通过在Java类中声明native的方法就开始了. 新建一个Android工程HelloNDK.新建一个类GetString public class GetStr