Jni程序开发的一般操作步骤如下:
1.编写java中的调用类
2.用javah生成c/c++原生函数的头文件
3.c/c++中调用需要的其他函数功能,实现原生函数(原则上可以调用任何资源)
4 将项目依赖的所有原生库和资源加入到java项目的java.library.path
5 生成java程序
6.发布java应用和dll库
1、 在eclipse项目中新建一个TestHello.java,输入以下内容:
public class TestHello {
static {
System.loadLibrary("TestHello");
}
public static native void hello(String msg);
public static void main(String[] args) {
hello("Hello,Kimm!");
}
}
编译生成TestHello.class文件。
2. 在java工程的bin目录下:
执行如下命令 生成TestHello.h头文件(就是jni代理stub的接口)
javah -classpath . -jni
TestHello
3. 在VC6中新建一个项目TestHello, 项目类型为Win32 Dynamic-Link Library。点击OK。
在弹出的窗口中选择A simple DLL project,点击Finish。
打开项目所在的文件目录,将步骤2中生成的TestHello.h文件复制到此目录。点击左边中间的FileView,切换到文件浏览模式。在Header Files上点击右键,选择Add Files to Folder…。
选择TestHello.h文件,点击OK。
打开StdAfx.h文件,再最后面添加:
#include <jni.h>
#include "TestHello.h"
4.打开TestHello.cpp文件,在最后面添加一段代码:
JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv * env, jclass obj, jstring jMsg)
{
const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);
MessageBox( 0, strMsgPtr,"Message box from VC++ ", 0 );
env->ReleaseStringUTFChars( jMsg, strMsgPtr);
}
在VC的菜单上选择Tools-Options…,打开选项对话框。在Directories文件夹,添加上jdk所在文件夹下的include和include\win32文件夹。
点击VC上的菜单项Build-Build All,生成TestHello.dll。
4、 将VC项目Debug文件夹中的TestHello.dll复制到TestHello.class所在的文件夹下。
5、 在命令行下输入java TestHello,弹出MessageBox对话框。调用win32 api成功。
备注:在编译时需要复制jdk/include下面的jawt_md.h,jni.h,jni_md.h到VC98\Include目录下。
用java:System.out.println( System.getProperty("java.library.path"))找到library路径,然后把生产的TesthHello.dll文件放在该目录下即可。
更多参考 http://setting.iteye.com/blog/304594
分享到:
相关推荐
JNI接口包括一些基本的数据类型映射(如Java的`int`对应C的`jint`),以及调用约定和异常处理方式。 在JNI中,Java对象在本地代码中表示为`JNIEnv`指针的结构体,它是一系列函数指针的集合,这些函数指针提供了访问...
本教程聚焦于在Android Studio环境下使用JNI进行学习,涵盖了基本数据类型转化、引用数据类型转化以及JSON格式数据类型的转化。 首先,我们要理解JNI的基本概念。JNI为Java程序提供了一个接口,通过这个接口,Java...
Android JNI(Java Native Interface)是Java...通过学习和理解这个资源,开发者可以掌握JNI的基本用法,进一步提升Android应用的性能和功能。在实际项目中,务必注意内存管理和线程安全,以确保应用的稳定性和效率。
在这个"第一个JNI实例学习"中,我们将探讨如何创建并运行一个基本的JNI程序。 首先,我们需要理解JNI的核心概念。JNI提供了一套接口,让Java代码能够声明本地方法,这些方法在运行时由本地(非Java)代码实现。本地...
总结,通过"android JNI学习三实例",我们可以掌握JNI的基本使用,理解如何在Android应用中集成C/C++代码,以及如何利用JNI进行跨语言交互,从而提高应用的性能和功能。实践中,我们需要结合具体的项目需求和性能...
1. **JNI基本概念** JNI是Java平台提供的一个接口,它使得开发者可以编写本地方法(用C或C++编写),这些本地方法可以在Java应用程序中被调用。JNI提供了一套API,通过这些API,Java代码能够调用C/C++代码,反之...
本示例"Android JNI 部分学习Demo"提供了一个基础的Java调用C代码的例子,帮助开发者了解和掌握JNI的基本使用。 首先,我们需要理解JNI的基本结构。在Android项目中,JNI通常包含以下部分: 1. **Java源文件**:这...
#### 二、JNI基本原理 JNI的主要作用是充当Java与本地代码之间的桥梁。它通过提供一套API(Application Programming Interface),使Java应用能够与本地代码进行交互。这一机制对于以下几种情况非常有用: 1. **...
本学习笔记涵盖了使用Android Studio开发JNI应用的基础步骤,适合初学者学习入门。 ### 环境配置 在进行JNI开发之前,需要确保Java开发环境配置正确。主要包括以下几个步骤: 1. **安装NDK**:NDK(Native ...
### Java与C++交互(JNI学习笔记) #### 一、Java类型与C/C++类型对应关系 在Java Native Interface (JNI) 中,Java 和 C/C++ 的数据类型有着明确的对应关系。理解这些对应关系是实现Java与C++交互的基础。 - **...
本教程将带你步入NDK编程和JNI基本操作的殿堂,帮助你掌握编程入门所需的关键知识。 1. NDK介绍: NDK是一组工具集,包含了编译器、链接器和其他工具,用于在Android平台上构建原生库。通过NDK,开发者可以创建C或...
1. **JNI基本概念**:JNI是一种接口,使得Java代码能够调用本地方法(用C、C++等编写),同时也允许本地代码调用Java方法。这通常用于利用Java的跨平台特性,同时利用C/C++的高性能和系统级功能。 2. **Java到C的...
在“JNI CHM文档”中,可能包含了JNI的基本概念、结构、API使用方法以及一些实例解析。CHM文件以索引方式组织内容,便于快速查找和学习。你可以通过点击目录或使用搜索功能来查找特定的知识点。 JNI编程规范是...
1. **Android_JNI总结.doc**:这份文档可能是对Android平台上JNI应用的总结,涵盖了JNI的基本概念、环境设置、头文件生成、本地方法定义、本地函数实现以及在Android Studio中的配置步骤。通过阅读,学习者可以了解...
学习和掌握JNI,可以帮助开发者充分利用本地代码的优势,提高Java应用的性能和功能。但同时,JNI也会增加代码的复杂性,因此在选择使用JNI时需要权衡利弊。在实际开发中,通常在以下场景下考虑使用JNI:性能关键的...
这个“jni02基本知识”的资料很可能是关于JNI的进阶学习内容,涵盖了比基础更深入的用法和技术。 JNI的核心概念主要包括以下几个方面: 1. **本地方法接口(Native Method Interface)**:JNI定义了一套接口和数据...
"android_JNI学习六"可能是一个关于深入理解和实践JNI技术的教程或项目,涵盖了JNI的基本概念、使用方法以及实际应用。 1. **JNI基础知识**:JNI是Java平台的一部分,为Java应用程序提供了一种方式来调用本地(非...
首先,让我们了解JNI的基本结构。一个JNI程序通常包含两部分:Java源代码和本地源代码。Java源代码中定义了native方法,这些方法将在本地源代码(C/C++)中实现。JNI头文件`jni.h`提供了在本地代码中操作Java对象和...