`
daxiaoli123
  • 浏览: 46695 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

学习JNI的心得

阅读更多
JNI(java native interface)本地接口
只有你理解了jni,你就可以用java调用c/c++ ,也可以c++调用java.一切都是可行的,只不过你是否愿意去做。
下面我来说下使用jni的主要步骤。可能我说的不是很清楚但是没关系,请加我QQ我有很多相关的资料包括视频  QQ565824237
看一下代码
public class HelloWorld {
    public native void displayHelloWorld();
    static {       
        System.loadLibrary("jnitest"); // jnitest 为动态链接的名称
    }   
    public static void main(String[] args) {               
     new HelloWorld().displayHelloWorld();
    }
}
声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。
Load动态库:System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法 displayHelloWorld()没有实现
同时需要注意的是System.loadLibrary();的参数“jnitest”是动态库的名字。加载的是一个动态的Dll文件 
Jni程序开发的一般操作步骤如下:
l. 编写java中的调用类
2 . 用javah生成c/c++原生函数的头文件
3 . c/c++中调用需要的其他函数功能,实现原生函数(原则上可以调用任何资源)
4 . 将项目依赖的所有原生库和资源加入到java项目的java.library.path
5 . 生成java程序
6 . 发布java应用和dll库



1.上面那个helloWorld类已经实现了
2.首先我是在eclipse中编写的,在dos中输入D:\coding\testjni\build\classes的路径
  2.1 然后javah com.jh.jni.HelloWorld就会生成一个 com_jh_jni_HelloWorld.h的头文 件
3.然后我们创建一个Windows Dynamic _link library 然后选择空的,将刚才所生成的*.h文件复制到这个工程的目录下面,然后在这个工程右键点击Header File add File导入复制过来的头文件
4.然后输写cpp文件
#include "jni.h"
#include <iostream.h>
#include "com_jh_jni_Hello.h"
#include <stdio.h>



JNIEXPORT void JNICALL
Java_com_jh_jni_Hello_displayHelloWorld(JNIEnv *env, jclass cls,jstring str)
{     
    cout<<"hello world可以啦"<<endl;
    cout.flush(); //程序运行的结果就是出现“ Hello World! ”。
 
}
要注意的是jni.h 用“”包含
还有D:\Program Files\Java\jdk1.6.0\include\jni.h
D:\Program Files\Java\jdk1.6.0\include\win32\jni_md.h
复制到这个工程目录下面就可以了
然后Build----Build xxx.dll
然后就会生成一个dll文件在 工程 debug中
后来我遇到了一个问题,一直困扰着我很多天,就是我是用JFrame通过jni来调用dll文件的
就是一直调用不了我还发了一个帖子呢
大家请看http://www.iteye.com/problems/54508 其实就一行代码的问题

生成dll文件以后我们就想着路径问题了
1.在环境变量中的path中输入你dll文件的路径D:\jni专区\jnitest2\Debug
2.可以放在D:\Program Files\Java\jdk1.6.0\bin目录下
3.可以放在C:\WINDOWS\system32目录下
如果你还是不懂的话您请看这个连接   http://www.iteye.com/topic/304594
分享到:
评论

相关推荐

    JNI调试心得

    在本文中,我们学习了如何在 VS2008 中调试 JNI 项目。我们了解了 JNI 的基础知识,创建了一个 JNI 项目,并配置了项目设置。我们还添加了 JNI 头文件,编写了 JNI 代码,并生成了 DLL 文件。这些步骤将帮助我们更好...

    android从HAL,jni,到app学习心得,绝对原创

    ### Android从HAL、JNI到APP学习心得 #### 一、HAL层详解 HAL(Hardware Abstraction Layer)即硬件抽象层,是Android系统架构中的一个重要组成部分,它为硬件提供了统一的接口,使得上层软件能够独立于硬件进行...

    Android串口开发之使用JNI实现ANDROID和串口通信详解

    前段时间因为工作需要研究了一下android的串口通信,网上有很多讲串口通信的文章,我在做的时候也参考了很多文章,现在就将我学习过程中的一些心得分享给大家,由于串口开发涉及到jni,所以开发环境需要支持ndk开发...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).pdf

    在学习JAVA基础的过程中,了解并掌握一些常用的英文缩写是非常重要的。这些缩写不仅代表着JAVA技术的核心概念,也是深入理解JAVA平台和应用开发的关键。以下是一些重要术语的详细解释: 1. **API (Application ...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).docx

    22. **JNI (Java Native Interface)**:JNI允许Java代码与其他编程语言(如C和C++)进行交互,实现本地方法调用。 23. **SableVM**:SableVM是一个用C语言编写的开源Java虚拟机实现。 理解这些术语对于Java开发者...

    Java学习材料(499篇文章)

    首先,"一个计算机专业学生几年的编程经验汇总.txt"可能会分享一位学生在学习Java过程中的心得,包括可能遇到的困难、解决方法以及编程技巧。这可能涵盖了一些实践性的建议,如如何有效地学习,如何调试代码,以及...

    Android HAL 层介绍

    3. **加载HAL库**:在Java层,通过JNI调用`hw_get_module`函数来获取对应的HAL库,并进一步通过`hw_device_open`函数打开设备,得到设备实例。 ```java // Java层示例 private native void initializeLed(String ...

    记录一些我自己在学习Android逆向过程中的有意思的东西.zip

    首先,说明.txt文件可能包含了作者在学习过程中的一些心得、技巧或者案例概述。在逆向工程中,理解代码逻辑、跟踪函数调用、识别加密算法等都是关键技能。作者可能会分享如何使用工具如dex2jar、JD-GUI来将Dalvik...

    BlogForZFB.zip

    "BlogForZFB.zip"这个压缩包文件似乎包含了与Android源码学习相关的博客文章或者教程,可能是一个开发者为了分享自己的学习心得或经验整理的资料集。 首先,Android源码的学习涵盖了以下几个主要方面: 1. **...

    JavaSE笔记_工具.zip

    Evernote标签则暗示这些笔记可能是使用Evernote这款知名笔记软件整理的,方便用户记录、检索和分享学习心得。 JavaSE的学习通常包括以下几个重要知识点: 1. **基础语法**:Java是一门面向对象的语言,其基础语法...

    Mi_Notes.zip

    这份名为“Mi_Notes.zip”的压缩包,很可能是某位热心开发者整理的学习笔记,旨在分享他在Android源码学习过程中的心得和体会。这份资源涵盖了多个关键知识点,让我们一起探讨一下。 1. **Android系统架构**:...

    精通Android开发合辑

    学习笔记(WORD)部分通常会包含作者在阅读过程中提炼的关键点、示例代码和实践心得,这对于巩固理论知识和实践经验非常有帮助。开发者可以通过笔记快速回顾重要概念,同时也可以借鉴作者的思考方式来解决问题。 总的...

    Pro Android Games----精通Android 游戏开发

    - **在线资源**:汇总官方文档、博客文章、视频教程等优质学习资源,为读者提供全方位的学习支持。 #### 八、未来展望与发展趋势 - **技术趋势**:探讨未来Android游戏开发领域可能出现的新技术和方向,帮助开发者...

    android.rar

    6. **android学习进阶路**: 这可能是为已经有一定基础的开发者准备的进阶教程,涵盖了高级主题,如JNI、自定义视图、多进程、安全性和隐私保护、动画效果等。 7. **10个常见的_Android_新手误区**: 这篇文章可能...

    Android NDK Beginner‘s Guide

    - **JNI基础**:介绍Java Native Interface (JNI)的基本概念和使用方法,这是连接Java代码与C/C++代码的关键技术。 2. **第2章:C/C++与Android** - **数据类型兼容性**:讨论Java与C/C++之间的数据类型差异及其...

    深入理解Android:卷I--详细书签版

    2.2 学习JNI的实例:MediaScanner 15 2.3 Java层的MediaScanner分析 16 2.3.1 加载JNI库 16 2.3.2 Java的native函数和总结 17 2.4 JNI层MediaScanner的分析 17 2.4.1 注册JNI函数 18 2.4.2 数据类型转换 22 ...

    java软件开发实习日记.pdf

    【Java软件开发实习日记】是记录了一位实习生在青岛进行软件开发实训过程的心得体会,主要涉及了Java和.NET的相关知识。以下是对这些知识点的详细阐述: 1. **角色转变**:实习期间,实习生需要从学生的身份转变为...

    深入理解Android:卷I

    它不仅提供了丰富的代码分析,还包含了作者多年来的实战经验和心得,对于希望深入掌握Android系统内部运作机制的开发者来说,是一本不可或缺的参考书。通过学习本书,读者将能够更加自信地面对实际开发中遇到的各种...

Global site tag (gtag.js) - Google Analytics