windows下的Android JNI开发
来源:互联网 发布:windows的主要功能是 编辑:程序博客网 时间:2024/05/22 12:55
windows下的JNI开发:
准备条件:
1、eclipse+adt+sdk android开发环境
2、NDK Windows版
步骤
1、编写android java代码
示例:
。。。 //略
// 定义native函数
private native int myFun(int n);
// 导入库
static {
System.loadLibrary("jnitest"); //需要放在java.library.path包含的路径中
// System.load("jnitest"); 不可用load函数导入库,load参数为绝对路径,相对路径用loadLibrary(....)
}
。。。 //略
<MainActivity.java>
2、build project 生成 <MainActivity.class>
3、使用javah命令生成jni头文件
命令示例:
E:\workspace\testJNI\bin>javah -d header -bootclasspath D:\AndroidSDK\android-sdk\platforms\android-19\android.jar -classpath classes -jni com.example.testjni.MainActivity
1> 进入工程bin目录
2> javah命令-d 指定目标位置
-bootclasspath 指定引导包路径(sdk中android.jar路径)
-classpath 指定java类路径(java类是指xx.xx.xx.class,路径指引到包名上一级)
-jni 编译后类型(此为默认,可以不设)
3> 进入header目录查看,即可看到生成的 .h文件(com_example_testjni_MainActivity.h)
4、拷贝 .h文件至根目录jni目录下
5、编写该头文件对应的.c文件以及Android.mk文件
1> 实现头文件中定义的函数接口
#include <jni.h>
#include "com_example_testjni_MainActivity.h"
JNIEXPORT jint JNICALL Java_com_example_testjni_MainActivity_myFun
(JNIEnv *env, jobject this, jint n)
{
return n*n;
}
2> 编写Android.mk
LOCAL_PATH:=${call my-dir}
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest
LOCAL_SRC_FILES := jnitest.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径。
include $(CLEAR_VARS)的作用是清除一些变量的值,但是LOCAL_PATH除外。
LOCAL_MODULE是用来指定当前待编译模块的名称。
LOCAL_SRC_FILES是用来指定参与编译的源代码文件。
include $(BUILD_SHARED_LIBRARY)是用来指示将当前模块编译为共享库,前缀为lib,后缀为.so。
参考:http://www.cnblogs.com/wainiwann/p/3837936.html
6、调用NDK中ndk-build工具生成.so库文件
进入jni目录,运行ndk-build
E:\workspace\testJNI\jni>D:\AndroidSDK\android-ndk-r10\ndk-build
在lib\armeabi目录下可看到生成的so文件
准备条件:
1、eclipse+adt+sdk android开发环境
2、NDK Windows版
步骤
1、编写android java代码
示例:
。。。 //略
// 定义native函数
private native int myFun(int n);
// 导入库
static {
System.loadLibrary("jnitest"); //需要放在java.library.path包含的路径中
// System.load("jnitest"); 不可用load函数导入库,load参数为绝对路径,相对路径用loadLibrary(....)
}
。。。 //略
<MainActivity.java>
2、build project 生成 <MainActivity.class>
3、使用javah命令生成jni头文件
命令示例:
E:\workspace\testJNI\bin>javah -d header -bootclasspath D:\AndroidSDK\android-sdk\platforms\android-19\android.jar -classpath classes -jni com.example.testjni.MainActivity
1> 进入工程bin目录
2> javah命令-d 指定目标位置
-bootclasspath 指定引导包路径(sdk中android.jar路径)
-classpath 指定java类路径(java类是指xx.xx.xx.class,路径指引到包名上一级)
-jni 编译后类型(此为默认,可以不设)
3> 进入header目录查看,即可看到生成的 .h文件(com_example_testjni_MainActivity.h)
4、拷贝 .h文件至根目录jni目录下
5、编写该头文件对应的.c文件以及Android.mk文件
1> 实现头文件中定义的函数接口
#include <jni.h>
#include "com_example_testjni_MainActivity.h"
JNIEXPORT jint JNICALL Java_com_example_testjni_MainActivity_myFun
(JNIEnv *env, jobject this, jint n)
{
return n*n;
}
2> 编写Android.mk
LOCAL_PATH:=${call my-dir}
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest
LOCAL_SRC_FILES := jnitest.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH必须位于Android.mk文件的最开始。它是用来定位源文件的位置,$(call my-dir)的作用就是返回当前目录的路径。
include $(CLEAR_VARS)的作用是清除一些变量的值,但是LOCAL_PATH除外。
LOCAL_MODULE是用来指定当前待编译模块的名称。
LOCAL_SRC_FILES是用来指定参与编译的源代码文件。
include $(BUILD_SHARED_LIBRARY)是用来指示将当前模块编译为共享库,前缀为lib,后缀为.so。
参考:http://www.cnblogs.com/wainiwann/p/3837936.html
6、调用NDK中ndk-build工具生成.so库文件
进入jni目录,运行ndk-build
E:\workspace\testJNI\jni>D:\AndroidSDK\android-ndk-r10\ndk-build
在lib\armeabi目录下可看到生成的so文件
7、编译运行整个Android工程,收工~
//
1、add native support,指定NDK路径
2、导入jni.h
http://blog.csdn.net/songyuc/article/details/51339711
3、配置javaH编译选项
http://blog.csdn.net/ling1874/article/details/20358041
0 0
- windows下的Android JNI开发
- Windows配置Android的JNI开发环境
- android下jni开发
- android下JNI开发
- 【笔记】Android平台下的JNI开发
- Android平台下的JNI开发
- Android平台下的JNI开发
- Android平台下的JNI开发
- Android平台下的JNI开发
- Android平台下的JNI开发
- Android平台下的JNI开发
- Eclipse下的Android JNI 开发
- Android平台下的JNI开发
- android源码下的jni开发
- Eclipse下的Android JNI 开发
- Eclipse下的Android JNI 开发
- Android studio 下的JNI开发
- Eclipse下的Android JNI 开发
- 反射输出属性值
- 富文本的使用 NSMutableAttributedString
- [框架整合]spring+springmvc+mybatis(4)
- Charles抓取手机数据包
- 树莓派:PC VNC Viewer中启动qt5.5.0的qtcreator,报告QXcbConnection: Failed to initialize XRandr等,无法启动
- windows下的Android JNI开发
- Ajax
- VB检测串口
- hdu 5639(区间dp)
- JS中数组的操作
- OCP 052 103
- Java并发:volatile内存可见性和指令重排
- Excel VBA 粘贴值不进行有效性检查。
- android-View工作原理(三)视图大小计算过程(measure过程)