JNI
来源:互联网 发布:java与模式 pdf 编辑:程序博客网 时间:2024/05/19 16:29
NDK简介
ndk(Native develop kits 本地开发包),可以让你开发JNI程序(本地方法,对应了C或C++中的方法)。
配置NDK-build的环境变量:计算机->右键 属性-高级系统设置->环境变量->path->粘贴D:\develops\android-ndk-r9d;步骤
I. 在java中写了一个本地方法:
// 定义一个本地的方法,这个方法,就相当于C程序中的方法
public native int hello();
II. 在工程的根目录下中创建了jni目录;
III. 在jni目录下写一个c文件,在c文件中实现本地方法:
#include <stdio.h> #include <stdlib.h> //Java_java代码中本地方法的全路径,然后把其中的.替换成_,然后在写方法体 // 注意方法的格式 int Java_cn_itcast_jnihelloworld_MainActivity_hello(){ return 5; }
IV. 打包c程序,生成动态库:``` 在jni目录下创建Android.mk,添加脚本: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := helloworld.c include $(BUILD_SHARED_LIBRARY) 在dos窗口中切换到工程的目录下,执行ndk-build,生成动态库;``` V. 在java代码中调用本地方法:
// 1.加载动态库(里面是c代码) // 动态库的 名称:libhello.so ,把前面的lib和后面的.so去掉 System.loadLibrary("hello"); // 2.调用本地方法(相当于调用c程序的方法) int result = hello();
- 使用javah生成头文件
I.如果jdk的版本是1.7,在dos窗口中切换到工程的src目录下:E:\projects\preLesson\xian03\12\userjavah\src;如果是1.6,应该切换到E:\projects\preLesson\xian03\12\userjavah\bin\classes下,使用javah命令生成头文件:E:\projects\preLesson\xian03\12\userjavah\src>javah cn.itcast.jnihelloworld.MainActivity,刷新工程; II.把头文件拖到jni目录下; III.把头文件中的方法拷贝到c文件中,写方法体,把jni导入到c文件中; VI.使用ndk-build命令重新生成动态库; V.在java代码中调用本地方法: // 1.加载动态库(里面是c代码) // 动态库的 名称:libhello.so ,把前面的lib和后面的.so去掉 System.loadLibrary("hello"); // 2.调用本地方法(相当于调用c程序的方法) int result = hello();
-
2. Android.mk文件说明
// $表示调用ndk中定义好的方法或者变量 // 加载本地的jni目录,当在dos窗口中执行ndk-build命令时,会找工程目录下中的jni目录; LOCAL_PATH := $(call my-dir) // 下次重新生成动态库时,清理掉上次生成的变量 include $(CLEAR_VARS) // 指定生成的动态库的名称,生成动态库文件后,文件名为libhello.so LOCAL_MODULE := hello // 指定了本地的c文件 LOCAL_SRC_FILES := helloworld.c // 指定了生成库的类型:BUILD_SHARED_LIBRARY表示动态库.so,BUILD_STATIC_LIBRARY表示静态库.a // 动态库.so文件小,静态库.a文件大。 include $(BUILD_SHARED_LIBRARY)
3.简便的开发流程
1.在Java代码中写一个本地方法; 2.使用javah命令生成头文件; 3.在eclipse中指定ndk的路径:window->preference->Android->NDK->NDK Locations:D:\develops\android-ndk-r9d 4.给工程添加jni的本地支持:右键工程->android tools->add native support...;设置库的名称。这一步可以在工程目录下生成jni目录及其目录下的mk、c文件。 5.把jni下的cpp文件改成c文件,并且把mk文件中的.cpp改成.c; 6.把头文件拖到jni目录下; 7.设置JNI头文件的路径:右键工程->properties->C/C++ General->includes->add-File System->D:\develops\android-ndk-r9d\platforms\android-8\arch-arm\usr\include; 8.把头文件引入到c文件中,把头文件中的方法拷贝到c文件中,实现这个方法; 9.选中工程,点击eclipse上面的小锤子,生成动态库; 10.在java代码中调用本地方法: // 1.加载动态库(里面是c代码) // 动态库的 名称:libhello.so ,把前面的lib和后面的.so去掉 System.loadLibrary("hello"); // 2.调用本地方法(相当于调用c程序的方法) int result = hello();
0 0
- Jni
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- JNI
- 重排链表
- Struts+hibernate简单连接数据库注册实例
- Spring IOC容器-注解的方式
- CentOS7.0 PHP卸载以及安装
- Android应用内多进程的使用及注意事项
- JNI
- android之interpolator的用法详解
- h5与css3权威指南初级(一)
- CentOS6.8 upgrade gcc to gcc4.8
- linux线程资源回收
- Maven学习8之对项目源文件打包
- POJ 2406 (KMP)
- HTML5 New Feature Series: Geolocation
- Spring 3 Conversion