android jni 开发入门
2016-04-17 21:37
447 查看
JNI是什么?
JNI: java native interface (java本地接口)
ndk : native develop kits 本地开发工具集(交叉编译工具链)
JNI开发的步骤
在java代码里面声明一个native的方法.
public native String helloFromC();
在工程目录下面创建一个jni的文件夹.
在jni文件夹里面编写c代码
//env是虚拟机的环境 obj调用者对象
jstring Java_包名类名方法名(JNIEnv* env,jobject obj){
}
实现c代码
使用env环境指向的结构体,有自带的函数,利用jvm的函数进行操作
return (*(*env)).NewStringUTF(env,arr);
return (*env)->NewStringUTF(env,arr);
编译c代码
配置c代码编译的脚本文件 –即创建Android.mk文件,写入一下内容
LOCAL_PATH := (callmy−dir)include(CLEAR_VARS)
LOCAL_MODULE := hello //编译后的模块名
LOCAL_SRC_FILES := Hello.c //编译的源文件的名称
调用ndk-build.cmd指令编译c代码 (在jni的文件目录编译,之后会在libs中生成相应的so文件)
注意配置环境变量
生成一个.so的文件 ( c代码编译出来的二进制可执行文件)
在java代码里面写静态代码块,加载so文件
static{
System.loadLibrary(“hello”); //即模块名(mk文件中写的)
}
像使用一般java方法一样调用native的方法.
以上仅限于在arm中调用,若想在其他模拟器中调用,需要如下:
1.在jni文件夹下建Application.mk文件,在其中编写APP_ABI := all
JNI: java native interface (java本地接口)
ndk : native develop kits 本地开发工具集(交叉编译工具链)
JNI开发的步骤
在java代码里面声明一个native的方法.
public native String helloFromC();
在工程目录下面创建一个jni的文件夹.
在jni文件夹里面编写c代码
//env是虚拟机的环境 obj调用者对象
jstring Java_包名类名方法名(JNIEnv* env,jobject obj){
}
实现c代码
使用env环境指向的结构体,有自带的函数,利用jvm的函数进行操作
return (*(*env)).NewStringUTF(env,arr);
return (*env)->NewStringUTF(env,arr);
编译c代码
配置c代码编译的脚本文件 –即创建Android.mk文件,写入一下内容
LOCAL_PATH := (callmy−dir)include(CLEAR_VARS)
LOCAL_MODULE := hello //编译后的模块名
LOCAL_SRC_FILES := Hello.c //编译的源文件的名称
调用ndk-build.cmd指令编译c代码 (在jni的文件目录编译,之后会在libs中生成相应的so文件)
注意配置环境变量
生成一个.so的文件 ( c代码编译出来的二进制可执行文件)
在java代码里面写静态代码块,加载so文件
static{
System.loadLibrary(“hello”); //即模块名(mk文件中写的)
}
像使用一般java方法一样调用native的方法.
以上仅限于在arm中调用,若想在其他模拟器中调用,需要如下:
1.在jni文件夹下建Application.mk文件,在其中编写APP_ABI := all
相关文章推荐
- jni简介及openSSL静态动态编译
- android 动画
- NDK开发历程(一):android native code的调试方法
- Dom4j的应用 xml的使用 android
- 简单实现Activity退出时向下滑动退出的效果
- android studio 快捷键
- Android布局优化一之设计篇
- Eclipse中跟踪调试Android源代码
- Android位置服务--BaiduMap的使用(1)
- Android中的日志输出(StackTraceElement)
- AndroidStudio 安装 配置 优化
- ADT开发android ndk没有NDK选项问题的解决方案
- 如何在android使用face++(Android Studio)
- Android的进程间通信----AIDL
- 仿qq侧滑删除的一个自定义View,独立的,不需要依赖其他的view
- 【Android】12、更多隐式Intent的用法
- Android倒计时功能的实现
- Android位置服务--用户定位Location
- 彻底解决 Android Studio 乱码问题
- android中的ActionBar和ToolBar