在Android上要想開發出高效率的軟體,還是需要用到C/C++語言,要想在Java上開發C/C++語言就需要在IDE上安裝NDK;在Android的官網上SDK開發環境已經包含了ADT插件,最新的Android開發IDE可以到官網下載下傳: http://developer.android.com/sdk/index.html
由于最近Android官網和google在國内經常進不去,我就把下載下傳的放到網盤,有需要的可以去下載下傳: http://pan.baidu.com/s/1hq3iBGw
準備的檔案

在新版本的ADT上安裝NDK環境非常友善,我的ADT版本是V22.0.5,版本号在打開ADT加載時會顯示出來
在官網上: http://developer.android.com/tools/sdk/ndk/index.html 下載下傳最新的NDK,NDK版本在r7以上之後就內建了Cygwin,不需要單獨去安裝Cygwin
1、Eclipse配置
SDK配置
NDK配置,路徑就是解壓出來的NDK根目錄
下面就來測試下NDK是否已經安裝成功
随便建立一個Android工程,添加Add Native Support
此時建立的工程就多了一個jni目錄
IDE有可能會報一個錯誤:
[2014-06-23 17:08:36 - Unable to launch cygpath. Is Cygwin on the path?] java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
工程右鍵,選擇以下選項
設定環境變量NDKROOT,Value就是你解壓出來的NDK目錄
在這裡配置的:${NDKROOT}/ndk-build.com就是以下腳本檔案
這時再去Clean工程就不會報錯了
下面就來編寫JNI的C++檔案,但是沒有代碼提示,是由于沒有導入頭檔案的原因
導入頭檔案方法,選擇“Project Properties”
點選“Add"
此時再按"alt + /"就有代碼提示
接下來就是編寫代碼
在NDKTest.cpp檔案
#include <string.h>#include <jni.h>jstring Java_com_dzt_ndktest_MainActivity_stringJNI(JNIEnv* env,jobject thiz){ return env->NewStringUTF("Hello JNI 我的第一個JNI");}
Android.mk檔案是自動生成的,可以不用修改
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:= NDKTestLOCAL_SRC_FILES := NDKTest.cppinclude $(BUILD_SHARED_LIBRARY)
Activity類調用代碼
package com.dzt.ndktest;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.tv); tv.setText(stringJNI()); } public native String stringJNI(); static { System.loadLibrary("NDKTest"); }}
build 工程
成功通過
再運作程式,很不幸,報錯了
如果是c++檔案需要加上extern "C",從C語言導出
修改代碼如下
#include <string.h>#include <jni.h>extern "C" {jstring Java_com_dzt_ndktest_MainActivity_stringFromJNI(JNIEnv* env, jobject thiz) { return env->NewStringUTF("Hello JNI");}}
成功通過
源代碼下載下傳: http://download.csdn.net/detail/deng0zhaotai/7540771
更多的例子可以到以下目錄擷取,這是NDK自帶的例子。