轉自 這篇文章中不少東西!!:http://blog.chinaunix.net/uid-20746260-id-3910616.htmlhtml
1. 建立JNI頭文件java
在工程目錄下輸入:android
javah -classpath bin/classes -d jni com.example.rgbir.rgbirJNI
遇到的問題c++
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文件eclipse
2. 配置NDK路徑函數
參考文章: 建立eclipse針對NDK的聯合編譯環境。post
3. 屏蔽語法檢查錯誤ui
對代碼分析(code analysis)進行屏蔽url
位置: 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的權限.若是支持網絡, 麥克風等同樣處理