mac实现jni的demo

今天在看ArrayList 源码时看到了System.arraycopy 这个方法,但是这个方法没有java实现。

后面一通查询查找,才知道 如下图 native是一个java调用c语言来实现的操作的jni。然后就写

了一个jni 的demo

1 编写带有 native java文件

public class HelloWorld {

public native void hello();

static{
System.loadLibrary("hello");
}

public static void main(String[] args){

new HelloWorld().hello();
}
}

2 命令行 编译 javac HelloWorld.java

3 命令行 编译 javah -jni HelloWorld 生成 HelloWorld.h 文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_hello
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
4 编写 c语言的实现 HelloWorld.c
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
printf("Hello World!\n");
return;
}
5 编写.c 实现 .o 文件

gcc -fPIC -D_REENTRANT -I/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/include/darwin -c HelloWorld.c

两个地址第一个是jni.h  第二个是 jni_md.h 如下图所示。

6 编译并生成本地库文件.dylib

gcc -shared HelloWorld.o -o libhello.dylib

7 运行java 文件 Helloword

以上所有文件最好都放到一起,以便于有权限。

时间: 2024-08-06 16:05:01

mac实现jni的demo的相关文章

Android JNI programming demo with Eclipse

用Eclipse 建立 JNI 的專案, 示範如何在 JAVA 調用 cpp 的函數. 我們將建立一個名稱為 jnidemo的專案, 在主Activity 將調用一個名為libHello.so 的 cpp 函數庫的 getVersion() 的函數, 將其返回字串寫在主Activity 的TextView 上. 首先用Eclipse建立一個新的 Android Activity 專案.  其他選項都用預設值就可以. 1. 稍微修改主活動配置 layout/activity_main.xml, 

android JNI 简单demo(2)之JNI demo 编写

android JNI 简单demo(2)之JNI demo 编写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25559013 二.JNI 基本要素: 1.编写 含native 方法的java文件. 2.把该文件用javah 生成 Cygwin 编译库时要用到的头文件,既*.h 文件. 3.编写*.c 文件,在*.c文件中,实现 *.h 中的方法. 4.编写mk文件. 5.配置NDK环境. 6.用Cygwin

Android JNI 开发 Demo by NDK (native develop kit)

最近终于有了一些空闲时间,所以想着把之前的Android相关的项目整理一下,前几天整理了Android OCR 的项目, 今天就干脆再整理一下 NDK JNI调用. 关于Android 中通过JNI进行本地调用的配置与开发,已经在链接 http://blog.csdn.net/watkinsong/article/details/9849973 中给出了非常详细的说明. 请仔细阅读. 同时,关于Android 作OCR的说明,也已经 在 http://blog.csdn.net/watkinso

简单JNI使用demo

android中使用JNI的小例子,直接上代码. 首先是Java类JniClient,定义native方法,User实体类就不上代码了,就简单定义了三个属性,name.age.sex. 1 package com.example.ndkdemo; 2 3 public class JniClient { 4 5 /** 6 * 通过JNI简单输出字符串 7 * @return 8 */ 9 static public native String printStr(); 10 11 /** 12

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

Visual Studio for Mac 初体验

惊不惊喜?意不意外?惊喜但不意外,因为在 Visual Studio for Mac 之前,已经有了 Visual Studio Code for Mac,那时候我们还以为 Visual Studio Code 就是 Visual Studio 的跨平台版本,但事实微软并不是这样想的,Visual Studio Code 相对于 Visual Studio 还是太简化了,企业级的应用开发 Visual Studio Code 还是有些力不从心,所以 Visual Studio for Mac 诞

关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2015.6.10

转载请标明出处,否则死全家.选择[复制链接]即可得到出处. (* ************************************************ *)(* *)(* *)(* 设计:爱吃猪头肉 & Flying Wang 2015-04-15 *)(* 上面的版权声明请不要移除. *)(* *)(* ************************************************ *) 本人所在的群(① FireMonkey[移动开发] 165232328) 对

采用异步socket实现客户端和服务端通信的demo

MAC系统基于UNIX的核心系统增强了系统的稳定性.性能以及响应能力.由于unix需要付费,以及版本基本上不更新,很多采用unix系统的电脑转用linux,unix处于停滞不前状态,而linux由于是开源的,免费的,所以全球很多技术大牛在不断改进它,给它增加新技术,增加新理念,是它日新月异的发展.所以mac os后期主要借鉴linux的新技术,所以现在的mac os更像linux而非unix.可以说苹果系统是从linux和unix演化而来的,所以linux的socket的编程对苹果系统仍然有效.

Android JNI专题交流

<Android JNI 专题>共分为四期: Jni简单demo Jni基本数据类型和方法介绍 Jni解析java自定义数据类型和回调java方法 Jni performance提高和Exception规避 已经整理成CHM和PDF文档,欢迎大家下载参阅: CHM:http://download.csdn.net/detail/cofftech/7657291 PDF:http://download.csdn.net/detail/cofftech/7657309