首先推荐一篇文章: http://www.wangchao.net.cn/bbsdetail_1754615.html
http://blog.csdn.net/abowu/article/details/7245609 1~4 篇文章
1:编写Java源程序
2:.java 通过编译生成 .class
3: .class编译生成对应的.h
4: .h通过编译生成.dll
5: 通过2编译所得的.class 调用.dll
详细过程:
第一步: 用文本编译器编写HelloWorld.java
class HelloWorld
{
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
第二步: 通过手动编译将HelloWorld.java 编译成 HelloWorld.class
(如果用Eclipse 什么的 都是可以的,只要能生成就行)
javac HelloWorld.java
运行上述代码有2个条件,首先Java环境变量要配置完成,其次已经定位到.java 所在的文件夹下
第三步:将HelloWorld.java 编译成 HelloWorld.h
javah HelloWorld
第四步:可以选用VC6.0 或者 VS 工具,将.h文件编译产生动态链接库.dll
这里采用 VC6.0 作为讲解
1. 打开VC6.0 选择新建Win32下,动态链接库工程,如图1.png 附件中
2. 新建一个.cpp文件,输入以下代码:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
3. 此时还需要2不操作才可以正确编译,形成.dll
(1)关于 jni.h,必须导入java 所在路径包括/jdk/include 和 /jdk/include/win32 如图2.png
(2)关于HelloWorld.h, 将前面编译好的.h文件加入到该工程下
这样就可以正确编译生成.dll
第五步:将生成的.dll 与 .class 放在同一目录下,然后执行
java HelloWorld
成功 (64位系统目前好像不支持) 错误:Can't load IA 32-bit .dll on a AMD 64-bit platform
全部文件可见附件。
- 大小: 88.9 KB
- 大小: 66.3 KB
分享到:
相关推荐
JNI在许多场景下都是必不可少的,比如访问操作系统特定的功能、调用C/C++库、提高性能或者集成已有的C/C++代码。在这个“jni教程实例手把手”资源中,包含了多个文档和一个示例项目,旨在帮助学习者全面理解并掌握...
通过学习这个实例,初学者可以更好地理解如何在Android应用中集成本地代码,以及如何在实际项目中使用JNI和NDK。 总之,`adt-bundle`、JNI和NDK是Android开发中的重要工具,它们使得开发者可以充分利用Java和C/C++...
这个实例是一个纯C版本的JNI应用,适合初学者作为学习参考。在这个实例中,我们将探讨JNI的基本概念、如何编写本地方法以及如何使用C语言实现这些方法。 1. JNI基础 - JNI定义了一套API,使Java应用程序能够调用...
本实例是专为初学者设计的,通过详细的例子和源代码,帮助理解JNI的工作原理和使用方法。 首先,JNI的核心在于定义了一套接口,使得Java代码可以通过这些接口调用本地(native)代码,也就是非Java语言编写的函数。...
这个“简单的JNI实例”显然是为了帮助初学者理解和掌握JNI的基本用法。 JNI的核心概念主要包括以下几个部分: 1. **本地方法接口**:JNI定义了一组函数,这些函数在Java虚拟机(JVM)内部实现,允许Java代码调用...
本实例将深入浅出地介绍如何通过JNI调用第三方DLL库,并以最简单的整型参数传递为例,帮助初学者快速理解JNI的工作原理。 首先,我们需要创建一个Java类,声明native方法。在Java中,我们使用`native`关键字来标记...
JNI在很多场景下都是必要的,比如调用操作系统底层功能、接入C/C++库或者提升性能敏感部分的执行效率。这个“jni最简单例子,注释详细”应该是提供了一个基础的JNI学习教程,下面我们将深入探讨JNI的相关知识点。 1...
本示例“AndroidStudio jni 示例”显然是为了帮助初学者理解如何在Android Studio项目中使用JNI技术。下面将详细介绍这个主题,并提供详细的步骤和知识点。 1. **JNI简介**: JNI允许Java应用程序调用本地(非Java...
总结来说,这个压缩包为学习和掌握JNI提供了一套完整的资源,无论是初学者还是有经验的开发者,都能从中受益。通过阅读CHM文档和PDF资料,你将能深入了解JNI的概念、使用方法以及编程规范,从而在实际项目中更加...
本实例是一个面向初学者的JNI开发入门教程,通过具体的项目"JniDemo",将帮助你理解JNI的基本概念和应用。 在Android应用开发中,JNI主要应用于以下几个场景: 1. **性能优化**:对于计算密集型任务,如图像处理、...
这一小实例适用于初学者,帮助他们理解如何在Android应用程序中集成音乐播放功能。 ##### MusicPlayer简介 `MediaPlayer`是Android开发中用于播放音频和视频的一个核心类。它可以用于播放多种格式的媒体文件,包括...
压缩包中的实例文档详细讲解了如何创建JNI项目,如何编写和调用本地方法,以及如何处理数据转换等问题,对于初学者来说是非常实用的学习材料。 通过学习和实践这些JNI编程资料,初学者可以掌握JNI的基本原理和操作...
总的来说,"jni-helloWorld"是一个非常适合初学者了解JNI基本用法的实例,通过它,开发者可以学习到如何在Java程序中嵌入本地代码,实现Java与本地代码的高效交互。而提供的错误处理和解决方案则有助于在实践中解决...
4. **编译本地方法**:将C/C++代码编译成动态链接库(如Windows下的.dll,Linux下的.so,MacOS下的.dylib)。 5. **加载库**:在Java代码的静态块中,通过`System.loadLibrary()`加载编译好的动态链接库。 6. **...
2. **全面介绍**:第三至第十章系统地阐述了JNI的各种特性,通过丰富的实例详细讲解了如何使用JNI进行Java和本地代码的交互。这些章节深入探讨了JNI接口的使用,包括如何声明和实现本地方法,以及如何处理数据类型和...
Android开发通过jni技术编写C语言方法并实现java调用C方法的实例。自己用C语言编写了一个动态链接库ndkfoo,并通过java调用动态库中的函数invokeNativeFunction,返回一个字符串,在android程序中显示出来。是初学...
JNI在各种场景下都非常有用,比如访问操作系统底层功能、优化性能关键部分或者整合已有的C/C++库。这个“JNI.zip”文件包含了一份关于JNI编程的全攻略,对于想要学习和理解JNI的开发者来说是一份宝贵的资源。 JNI的...
- JNIEnv指针:每个JNI函数的第一个参数,是JNI接口的实例,提供了访问Java对象、数组、字符串等的方法。 - 类引用(Class Reference):表示Java类的本地表示,可以用来获取类的方法ID和字段ID。 - 方法ID和字段...