NDK问题总结

转自 这篇文章中很多东西!!:http://blog.chinaunix.net/uid-20746260-id-3910616.html

1. 创建JNI头文件

  在工程目录下输入:

javah -classpath bin/classes -d jni com.example.rgbir.rgbirJNI

   遇到的问题

error: cannot access com.example.rgbir.rgbirJNI
class file for com.example.rgbir.rgbirJNI not found
javadoc: error - Class com.example.rgbir.rgbirJNI not found.
Error: No classes were specified on the command line. Try -help.

解决方法:点击运行工程,重新在命令行输入命令即可。

原因: 重新生成class文件

2. 配置NDK路径

  参考文章: 创建eclipse针对NDK的联合编译环境。

3. 屏蔽语法检查错误

对代码分析(code analysis)进行屏蔽

位置: project-> properties ->c/c++ general ->code analysis

在选择“using project setting”下面的syntax and semantic error 进行屏蔽

4. 解决JNI层函数头文件《jni.h》 下的黄线

  因为CDT索引器没有找到路径,而NDK知道。

  进入项目属性页面,“c/c++ general” -》 “Paths and symbols”,右边“add...” 输入JNI相关头文件所在目录。比如“${env_var:Android_NDK}/platforms/android-18/arch-arm/usr/include”.

5 C++包含。h头文件

JNI文件夹下的c++程序包含。h文件, 。h文件中所有函数声明必须在如下宏中,否则会报 undefined reference to 的错误。

#ifdef __cplusplus
extern "C" {
#endif

//一段代码

#ifdef __cplusplus
}
#endif

6. java.lang.UnsatisfiedLinkError:Native method not found

so文件编译生成后,运行时,有时候会遇到java.lang.UnsatisfiedLinkError: Native method not found问题。
   a. JNI方法头部大小写问题     
      在C++中,方法名:Java_com_XXX,而不是java_com_XXX。建议直接从生成的.h头文件直接复制方法名到C或者C++文件中。
   b. C++文件问题
        如果是C++文件(.cpp或者.cc),要使用extern "C" {   } 把本地方法括进去
   c. 往JNI方法中传值问题
         如,调用native方法sendSomeThing(Object object),如果传入的object为null,有可能会报上面错误。

7. SD卡中创建文件、写入文件、删除文件操作的支持

在AndroidManifest.xml中加入访问SDCard的权限.如果支持网络, 麦克风等一样处理

时间: 2024-10-18 17:05:46

NDK问题总结的相关文章

哪位大兄弟有用 cMake 开发Android ndk的

一直用 Android studio 开发ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各种蛋疼.主要每次新建一个module都要修改配置半天.之前也看到过google 开发文档有提到 cmake 但是一直没用.哪位大兄弟用过,说下经验 哪位大兄弟有用 cMake 开发Android ndk的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007205830/哪位

Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用

一.Android平台编程方式:      1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现)      2.自从ndk r5发布以后,已经允许完全用C/C++ 来开发应用或者游戏,而不再需要编写任何Java 的代码   Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序. 二.跨平台移动开发   Delphi使用android的NDK是通过JNI接口,封装好了,不用自己

使用ndk交叉编译android各平台版本的第三方库

只要弄明白了ndk-bundle的目录结构,交叉编译的基本原理就可以自行编写脚本去编译了.从仓库拿下代码包后,一般在linux平台下编译当前平台使用的库,只要使用其自动配置脚本configure进行平台相关的配置,配置成功后就可以执行make进行编译以及安装.configure通常会在/usr/inclue和/usr/lib下检查平台支持的接口,编译时需要使用binutils和gcc两个工具集合.所以要使用ndk进行交叉编译,最基本就是要对上面4要素进行配置,就可以配置出最基本的交叉平台环境,顺

Android NDK开发环境搭建

目录[-] 一.下载NDK开发包,并解压. 二.下载Cygwin,安装所需库. 三.将NDK添加到Cygwin的build配置中. 四.安装CDT. ? 1 2 3 4 5 /* http://my.oschina.net/lifj/blog/176916 */ 有人说,网上的环境配置一大堆,你还写做什么?一来,是我再次复习的材料.二来,网上有些地方说的不是很详细,我也是参考了好多资料,弄了半天才弄好环境.写下来,帮助后面的人省掉不必要的麻烦.下面进入正题. 作为一个2年的android攻城狮,

Android NDK开发的一些技巧

Android NDK(Native Development Kit)是基于Java JNI的使用C/C++和Java来混合开发应用的一种方式,甚至在Android 2.3(API 9)以后可以用Native(Native这个字在不同的语境中意义是不一样的,这里指的是JNI中的C/C++的代码:如果放在Hybrid中Native就是指平台原生的语言和API)代码来创建标准界面组件Activity,换句话说就可以用纯C/C++来写一个Android应用,但是貌似还没有人这么干过,这只是一种理论上的

Android NDK 编译加入so文件

在cocos2d-x中集成百度语音识别的时候,运行build_native.py会把libs/armeabi目录清空. 以下是解决办法,把so文件放在jni/prebuilt里面. 修改Android.mk文件,主要有两行include $(CLEAR_VARS) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #百度语音识别so LOCAL_MODULE := BDVoiceRecognitionClient_V1 LOCAL_SRC_FI

基于 Android NDK 的学习之旅----- C调用Java

http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html 基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现. 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法. 1.主要流程 1.  新建一个测试类TestProvider.java a)       

Android NDK学习笔记(一) 为什么要用NDK?

NDK是什么 NDK是Native Development Kit的简称,即本地开发工具包.通过NDK,Android允许开发人员使用本地代码语言(例如C/C++)来完成应用的部分(甚至全部)功能.注意:由于翻译原因,有些地方也把Native翻译为"原生". NDK是SDK的一个补充,可以帮助你做这些事情: 生成可以在ARM CPU,Android 1.5(及以上)平台运行的JNI兼容的共享库. 将生成的共享库放置在应用程序项目路径的合适位置,使其能自动地添加进你最终的(和经过签名的)

Android NDK:Aborting..Stop的处理方法

在eclipse中配置cocos2d-x的android环境时,遇到这样的错误提示 网上搜索了一下,说是在NDK_MODULE_PATH环境变量下未找到所需要的Android.mk文件,后来仔细研究了一下项目属性,找到环境设置这一项 添加完NDK_MODULE_PATH路径之后,会在项目的.settings目录下生成一个名为org.eclipse.cdt.core.prefs的文件 之后将project clean && build就好了     注意事项: 添加NDK_MODULE_PA

jni ndk 入门

1. Linux环境模拟,下载sygwin 安装,选择devl 和shell -> install sygwin 中的配置ndk环境,进入安装目录c:/cygwin64 etc/profile文件配置ndk的环境 //37行 PATH="/usr/local/bin:/usr/bin:/cygdrive/d/android-ndk-r9d-windows-x86_64/android-ndk-r9d${PATH:+:${PATH}}" 2. 下载ndk 3. 开发,参考于ndk/