一個超級快配置NDK的辦法:(NDK DEMO)php
第一步:html
到Android官網下載Android的開發工具ADT(Android Development Tool的縮寫),該工具集成了最新的ADT和NDK插件以及Eclipse,還有一個最新版本SDK。解壓以後就能夠用了。java
ADT插件:管理Android SDK和相關的開發工具的android
NDK插件:用於開發Android NDK的插件,ADT版本在20以上,就能安裝NDK插件,另外NDK集成了CDT插件。也能夠在線更新ADT、NDK插件app
第二步:ide
到Android官網下載最新的NDK,注:NDK版本在r7以上以後就集成了Cygwin,並且仍是十分精簡版。比起下載Cygwin要方便多啦!下載連接見:http://developer.android.com/tools/sdk/ndk/index.html函數
第三步:工具
打開Eclipse,點Window->Preferences->Android->NDK,設置NDK路徑,例如E:/android-ndk-r9c開發工具
第四步:ui
新建一個Android工程,在工程上右鍵點擊Android Tools->Add Native Support...,而後給咱們的.so文件取個名字,例如:my-ndk
這時候工程就會多一個jni的文件夾,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,my-ndk.cpp就是NDK的源文件。
第五步:
接下來仿着NDK的demo,Hello-JNI工程寫一下。使用Alt + '/'能夠代碼提示
JNI接口的命名規範是:Java_ + 調用該方法的包名(包名的點用_代替) + _ + 調用該接口的類名 + _ + 方法名,對於實例方法,有兩個參數是必要的,一個JNI的環境指針JNIEnv *,另外一個是調用該方法的Java實例jobject
my-ndk.cpp:
#include JNIEXPORT jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env,jobject thiz) {
return env->NewStringUTF("Hello jni");}
public class TestActivity extends Activity { static { System.loadLibrary("my-ndk"); } // 聲明JNI層的原生方法,使用native關鍵字 public native String stringFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tvText = new TextView(this); tvText.setText(stringFromJNI()); setContentView(tvText); }}
第六步:
完成了,而後運行。運行以前先編譯NDK,而後在編譯JAVA代碼。編譯也許會遇到Unable to launch cygpath. Is Cygwin on the path?錯誤,解決辦法以下:
1.工程右鍵,點Properties->C/C++ Build的Building Settings中去掉Use default build command,而後輸入${NDKROOT}/ndk-build.cmd
2.在C/C++ Build中點擊Environment,點Add...添加環境變量NDKROOT,值爲NDK的根目錄
3.再編譯,問題就解決啦!
運行時崩潰,遇到java.lang.UnsatisfiedLinkError: stringFromJNI錯誤,解決辦法:在C++文件中函數定義前添加extern "C"修飾
extern "C" {JNIEXPORT jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env, jobject thiz);}JNIEXPORT jstring JNICALL Java_com_shamoo_activity_TestActivity_stringFromJNI(JNIEnv *env, jobject thiz) { return env->NewStringUTF("Hello jni");}
參考文章:
http://blog.csdn.net/pi9nc/article/details/28855737
http://www.2cto.com/kf/201403/288157.html
http://www.th7.cn/Program/Android/201404/189197.shtml