`
kingbinchow
  • 浏览: 124495 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android--JNI (转)

 
阅读更多
The JNI is designed to handle situations where you need to combine Java applications with native code. As a two-way interface, the JNI can support two types of native code: native libraries and native applications.

JNI就是让Java代码与native代码(比如C和C++)交互的一种机制。

《The JNI Programmer's Guide and Specification》
                  --http://java.sun.com/docs/books/jni/html/intro.html#994

首先编辑一个Java文件Prompt.java

public 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");
  }
}

其中native用来声明一个方法,而方法的实现则交给C代码。static代码块用来加载接下来即将生成的libPrompt.so

然后编译刚才的Prompt.java,并通过javah生成一个C语言的头文件

javac Prompt.java
javah -jni Prompt

这样就生成了一个Prompt.h文件,接下来编辑Prompt.c

#include <stdio.h>
#include <jni.h>
#include "Prompt.h"

JNIEXPORT jstring 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);
}


编译Prompt.c来生成libPromt.so,虽然有些warning,不过还是能编译通过的

gcc -shared -fPIC -I /opt/java/include/ -I /opt/java/include/linux/ Prompt.c -o libPrompt.so


于是,可以运行了

java -Djava.library.path=. Prompt



分享到:
评论

相关推荐

    webrtc-android-jni.rar

    在这个"webrtc-android-jni.rar"压缩包中,我们可以推测其内容可能与Android应用开发中集成WebRTC以及使用JNI进行性能优化有关。下面将详细介绍WebRTC在Android上的实现和JNI的相关知识点。 1. **WebRTC架构**:...

    android-aes-jni, 用于 jni& Java的Android AES示例.zip

    android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build

    Android--JNI-Device.zip_Android jni_android_jni_jni android

    这个“Android--JNI-Device.zip”文件显然是一个关于Android平台上使用JNI与硬件设备驱动进行交互的教程资料。通过分析描述和标签,我们可以深入探讨JNI在Android中的应用以及如何利用它来调用驱动代码。 1. **JNI...

    Android代码-dlib-android-app

    See dlib-android for JNI lib. Refer to dlib-android/jni/jnilib_ex Grap the source $ git clone https://github.com/tzutalin/dlib-android-app.git Features Support HOG detector HOG Face detection ...

    ffmpeg-android-jni.zip

    在Android平台上,FFmpeg 可以通过JNI(Java Native Interface)来调用,实现对音视频的处理,比如解码、编码、转码、裁剪、合并等操作。 "ffmpeg-android-jni.zip" 是一个包含了FFmpeg编译后针对Android平台的本地...

    Android--开发--_jni操作指南.rar

    JNI在Android开发中扮演着重要的角色,特别是在需要高效计算、调用系统底层库或者利用硬件特性时。这份“Android--开发--_jni操作指南”很可能是详细解释了如何在Android应用开发中使用JNI技术的教程。 JNI的核心...

    webrtc-android-jni

    标签"webrtc"表示与WebRTC项目有关,"android"指明了目标平台,"jni"意味着使用了JNI技术,"so"通常指的是Shared Object,是Linux系统下的动态链接库文件,对于Android来说,就是.so文件,其中包含了libwebrtc的原生...

    android-custom-jni-namespace,.zip

    标题“android-custom-jni-namespace.zip”提示我们这个压缩包可能包含了关于Android平台下自定义JNI(Java Native Interface)命名空间的源代码或教程。JNI是Java与本地代码(如C/C++)交互的一种机制,它允许Java...

    Android-ndk-jni AES加解密 C++

    本知识点主要聚焦于如何在Android NDK(Native Development Kit)环境下,通过JNI(Java Native Interface)来实现AES(Advanced Encryption Standard)加解密。以下是关于这一主题的详细阐述。 **AES加解密简介** ...

    android-ndk-jni示例代码

    Android NDK和JNI是Android应用开发中的重要工具,它们允许开发者使用C++或者其他原生语言编写部分代码,以实现性能优化、利用硬件加速或者集成已有的C/C++库。本示例代码“android-ndk-jni”是针对这一主题的具体...

    android studio 3.4配置Android -jni 开发基础的教程详解

    Android Studio 3.4 配置 Android-JNI 开发基础教程详解 Android Studio 3.4 配置 Android-JNI 开发基础是 Android 应用程序开发中的一项重要技术,能够帮助开发者更好地编写 Android 应用程序。本文将详细介绍如何...

    android--JNI.zip_android_android 驱动_jni_jni android

    Android JNI,全称为Java Native Interface,是Android系统中用于连接Java层和原生代码(C/C++)的一个关键技术。JNI允许开发者在Android应用中调用本地方法,从而利用C和C++的强大性能和库来解决特定问题,比如优化...

    Android-Sand使用JNI实现Sobel算子图像边缘检测的Android库

    "Sand"是一个专门为Android设计的开源库,它使用JNI(Java Native Interface)技术实现了Sobel算子来执行图像边缘检测。JNI是一种让Java代码调用C/C++原生代码的技术,能够提高图像处理的效率,因为本地代码通常比...

    android-ndk(android-ndk-r26b-windows.zip)

    2. **JNI接口**:Java Native Interface (JNI) 是Android平台上Java与原生代码交互的桥梁。NDK提供了头文件和编译工具,使得开发者可以轻松地在Java代码中调用C/C++函数,反之亦然。 3. **交叉编译**:NDK包含了一...

    Android--开发--JNI编程指南.rar

    在Android开发中,JNI的使用非常广泛,主要用于实现Java无法高效或直接处理的功能,如利用C/C++进行性能优化、调用系统底层库、与硬件设备通信等。以下是对Android JNI编程的详细指南: 1. **JNI基本概念** - JNI...

    android-ndk(android-ndk-r25b-linux.zip)

    在Android中,JNI是Android应用与NDK之间的重要桥梁,使得Java应用程序可以调用C/C++编写的本地库,同时C/C++代码也能调用Java的方法。 2. **NDK的优势**: - **性能优化**:对于计算密集型任务,例如图形处理、...

    w2m-fdfsclient-jni

    《深入理解w2m-fdfsclient-jni:FastDFS在Android平台上的应用》 在IT领域,文件存储和管理是至关重要的环节,尤其在大数据时代,高效、安全的文件系统显得尤为重要。FastDFS是一个轻量级的开源分布式文件系统,它...

    基于 Android NDK 的学习之旅-----JNI LOG 打印

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他编程语言(如C++)交互。JNI在很多场景下都非常重要,比如优化性能、使用硬件加速功能、接入第三方库或者实现与操作系统更...

    Android开发书籍 - JNI详解_导航版

    ### Android开发书籍 - JNI详解_导航版 #### 知识点概述 1. **JNI (Java Native Interface)**:这是Sun Microsystems定义的一个标准接口,允许Java代码与其他语言(主要是C/C++)编写的本地代码进行交互。例如,...

    android-ndk(android-ndk-r23b-windows.zip)

    在NDK中,开发者可以编写JNI接口,然后在Android应用的Java层通过这些接口来调用本地代码。 Android-ndk-r23b包含了一系列的编译器、链接器和其他工具,用于将C/C++源代码编译成可以在Android设备上运行的机器码。...

Global site tag (gtag.js) - Google Analytics