ndk环境搭建(HelloJNI开发)
来源:互联网 发布:淘宝店铺取什么名字好 编辑:程序博客网 时间:2024/05/17 06:06
ndk环境搭建(HelloJNI开发)
ndk允许开发者使用原生代码(c/c++)实现应用的一部分,在某种情况下可以提高程序的运行效率。
工具:
- eclipse+ADT
- android-ndk-r10b(试过r13的,编译出错,找过好多资料没解决)
如果你的电脑还行,还是使用as吧,eclipse伤不起。
设置ndk路径
- 打开eclipse –> window –> preferences –> android –> ndk 设置ndk路径
新建一个android项目
新建一个Android工程,在工程上右键点击Android Tools->Add Native Support…,然后给我们的.so文件取个名字,例如:hello-jni
工程就会多一个jni的文件夹,jni下有Android.mk和hello-jni.cpp文件。Android.mk是NDK工程的Makefile,hello-jni.cpp就是NDK的源文件。
如果你熟悉c语言可以把my-ndk.cpp改为my-ndk.c, 相应的将Android.mk里改为.c
LOCAL_SRC_FILES := hello-jni.c
cpp编写
- JNI接口的命名规范是:
- Java_ + 调用该方法的包名(包名的点用代替) + + 调用该接口的类名 + _ + 方法名,对于实例方法,有两个参数是必要的,一个JNI的环境指针JNIEnv *,另一个是调用该方法的Java实例jobject
example:
hell-jni.cpp:
#include <jni.h>JNIEXPORT jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env, jobject thiz) { return env->NewStringUTF("Hello jni");}
此处你在编写时可能会出现错误,请看备注里的
- JNI接口的命名规范是:
声明JNI层的原生方法,使用native关键字
public native String stringFromJNI();
使用ndk库必须在static代码块里面用System.loadLaibrary加载.so库
完成了,然后运行。运行之前先编译NDK,然后在编译JAVA代码。
备注:
eclipse 选择ndk目录时如果出现 Not a invalid ndk directory 时,需要在ndk的目录下建一个ndk-build 空文件
编译也许会遇到Unable to launch cygpath. Is Cygwin on the path?错误,解决办法如下:
- 工程右键,点Properties->C/C++ Build的Building Settings中去掉Use default build command,然后输入${NDKROOT}/ndk-build.cmd
- 在C/C++ Build中点击Environment,点Add…添加环境变量NDKROOT,值为NDK的根目录
运行时崩溃,遇到java.lang.UnsatisfiedLinkError: stringFromJNI错误,解决办法:
在C++文件中函数定义前添加extern “C”修饰
原因是:使用extern “C”修饰,编译器会按C语言的方式编译和连接。在C语言中,函数编译之后函数名与C++函数编译之后不同,例如foo(int x, int y),C可能会编译成_foo的名字,而C++因为支持重载,所以会编译成像_foo_int_int这种带参数的函数名。如果是按照C语言的编译方式,调用foo函数是找不到_foo的函数名就会报出函数名找不到的错误。所以要添加extern “C”修饰。
eclipse android ndk 提示Type ‘JNIEnv’ could not be resolved 等信息解决办法
是由于没有将jni.h导入的缘故,而这个文件在ndk的目录下面。所以,参照以下步骤:
Project Properties -> C/C++ General -> Path and Symbols
选择include标签,Add ->ndk目录/platforms/android-14/arch-arm/usr/include
且选中All languages.
最后Apply -> OK
这样错误就解决了。- c++ 使用的是env->函数名
c 使用的是(*env)->
- ndk环境搭建(HelloJNI开发)
- NDK环境搭建 + HelloJni
- android下搭建ndk环境以及hellojni
- NDK开发环境配置及HelloJni基本开发步骤
- Android NDK开发之《HelloJni》
- 【NDK开发】NDK开发实例1-hellojni
- Android NDK之环境配置及HelloJni
- NDK 开发环境搭建
- NDK 开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- NDK 开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- NDK开发环境搭建
- 常用的cmd命令
- gRPC的简单Go例子
- 【51nod1060】【最复杂的数】【数论】【反素数】【搜索】【结论】
- HTML游戏开发实践之跨平台开发
- mui 开发知识积累-------打开页面的方式
- ndk环境搭建(HelloJNI开发)
- MAC笔记本 Safari,Chrome等浏览器无法打开网页
- tensorflow-000-Overview
- file_get_contents的post请求
- ffmpeg重采样中swr_convert和swr_get_out_samples的用法
- steam vr 简单开发
- git的使用以及遇到的小坑
- Android个人学习笔记-底部导航切换Fragment的实现
- php表单加入Token防止重复提交的方法分析