1. 编写Java文件,在其中声明native方法, 并通过static 语句块加载动态链接库,示例Prompt.java代码如下:
class Prompt {
private native String getLine(String prompt);
public static void main(String args[]) {
Prompt p = new Prompt();
String input = p.getLine("Type a line: ");
System.out.println("User typed: " + input);
}
static {
System.loadLibrary("Prompt");
}
}
2.调用javac命令生成Prompt.class文件;
javac Prompt.java
3.调用javah命令生成Prompt.h头文件供C程序引用:
javah -jni Prompt
自动生成的头文件如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Prompt */
#ifndef _Included_Prompt
#define _Included_Prompt
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Prompt
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Prompt_getLine
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
4.编写Prompt.c文件实现具体功能:
#include <jni.h>
#include <stdio.h>
#include "Prompt.h"
JNIEXPORT void JNICALL
Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt)
{
char buf[128];
const jbyte *str;
str = (*env)->GetStringUTFChars(env, prompt, NULL);
if(str == NULL) {
return NULL;
}
printf("%s", str);
(*env)->ReleaseStringUTFChars(env, prompt, str);
scanf("%s", buf);
return (*env)->NewStringUTF(env, buf);
}
5. 编译动态库libPrompt.so;
gcc -shared -fpic -I/usr/lib/jvm/java-6-sun-1.6.0.26/include
-I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux Prompt.c -o
libPrompt.so
6. 运行。
java Prompt
分享到:
相关推荐
这个"ubuntu上面使用jni例子"的压缩包很可能是提供了一个在Ubuntu环境下开发和运行JNI程序的示例。 JNI的核心在于创建本地方法接口,这些接口允许Java代码调用C/C++编写的函数,反之亦然。下面我们将深入探讨在...
你也需要安装Android Native Development Kit (NDK),因为Android的JNI开发通常基于NDK。安装这些工具后,你需要配置相应的环境变量,以便在命令行中能够正常调用。 2. **创建Java项目**:编写一个简单的Java类,...
在Ubuntu环境下开发JNI应用程序,主要涉及以下几个步骤: 1. **编写Java文件并声明native方法**: 在Java类中,你需要声明一个native方法,该方法将在本地代码(通常是C或C++)中实现。例如,在`Prompt.java`文件...
在Android开发中,经常需要使用到JNI (Java Native Interface) 技术来实现Java层与C/C++层的交互,特别是在需要进行高性能计算或者操作底层硬件时。本文档通过一个具体的例子——通过JNI调用驱动程序来控制LED灯的...
本篇文章将通过一个具体的例子来讲解如何在Android中使用JNI进行开发。 根据提供的描述,我们将探讨如何通过JNI调用本地代码来操作一个驱动节点,具体来说是控制LED的亮灭。这不仅对于调试底层驱动非常有用,同时也...
本教程将深入解析Android JNI的编程过程,帮助开发者理解如何在Android环境下编译和使用JNI库。 首先,你需要一个编译环境,这里推荐使用Ubuntu 10操作系统。为了获取Android源码,我们需要使用Git工具克隆官方仓库...
在这个例子中,使用的是Ubuntu 10操作系统。通过Git获取Android的源码是必要的步骤,因为我们需要对源码进行修改以实现JNI功能。获取源码并不只是为了阅读或广告推广,而是为了编写和调试JNI代码,从而增强应用程序...
在Android开发领域,NDK(Native Development Kit)是一个不可或缺的工具,它允许开发者使用C、C++等原生代码来编写部分应用,以提高性能,尤其是处理图形计算、物理模拟等计算密集型任务时。本资源"NDK-build-under...
要使用JNI,首先需要定义一个Java类,声明native方法,并使用`javah`工具生成对应的C头文件。然后在C代码中实现这个头文件中的函数,最后编译生成动态链接库(.so文件),在Java中加载这个库并调用对应的方法。 2. ...
在Java编程中,有时我们需要利用本地的系统资源或者调用特定平台的功能,这时就需要与操作系统底层的动态链接库(DLL,...在实际开发中,理解JNI原理和正确使用JNative库是关键,同时要注意平台兼容性和错误处理。
本文将介绍如何在Ubuntu环境下使用dnw工具,这是一个专为Linux设计的实用程序,尤其适用于与USB设备的交互。dnw工具在Java编程语言的环境中尤为适用,因为它允许开发者直接通过USB接口与硬件设备进行数据传输。 ...
1. **设置开发环境**:首先,你需要一个支持C/C++开发的环境,如Ubuntu上的GCC编译器。此外,确保你的系统安装了Java JDK,并且配置了相应的环境变量。 2. **创建C程序**:编写C/C++代码,实现需要的功能。这通常...
文档提供了一个六篇文章的学习过程,包括内核空间硬件驱动程序编写、C可执行程序开发、HAL接口模块开发、JNI方法实现、硬件服务接口和应用程序框架层的交互,最后是通过应用程序访问硬件服务。 7. Android内核驱动...
在LED控制的例子中,HAL层的接口可能包含打开和关闭LED的函数,这些函数被JNI调用并转发给相应的驱动程序。 驱动程序是操作系统和硬件之间的关键部分,它理解硬件的语言并翻译成操作系统可以理解的指令。对于LED灯...
描述中提到的"Ubuntu下用NDK交叉编译",意味着开发环境是在Ubuntu操作系统上,使用了Android Native Development Kit (NDK) 来进行编译。NDK是Google提供的一套工具,允许开发者用C/C++编写原生代码,然后将其集成到...
在这个例子中,使用的是Ubuntu 7.02操作系统和arm-none-linux-gnueabi交叉编译器,该编译器允许你在非ARM架构的机器上构建适用于ARM设备的代码。确保已经安装了这个交叉编译器,并将其路径添加到环境变量中,以便...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
开发者可以通过在Ubuntu环境下运行模拟器,并使用`adb shell`命令进入Android系统的shell,然后通过`cat /proc/kmsg`查看这些日志信息。 接下来,我们转向用户空间的程序开发。Android为用户空间的C/C++和Java代码...
在Ubuntu系统上编写Android内核驱动程序时,通常会使用虚拟设备来模拟真实的硬件设备,以此来简化开发和测试过程。虚拟设备“hello”就是这样一个例子,它具备可读写的4字节寄存器。编写这样的驱动程序,本质上与...
RXTX的优势在于它的跨平台特性,通过JNI(Java Native Interface)技术,它能够调用不同操作系统下的本地库来实现串口通信,包括Linux、Mac OS X以及Windows等。这对于开发需要在多种环境下运行的串口通信应用非常...