在Android上要想開發出高效率的軟件,仍是需要用到C/C++語言,要想在Java上開發C/C++語言就需要在IDE上安裝NDK;在Android的官網上SDK開發環境已經包括了ADT插件。最新的Android開發IDE可以到官網下載:http://developer.android.com/sdk/index.htmlcss
由於近期Android官網和google在國內經常進不去,我就把下載的放到網盤,有需要的可以去下載:http://pan.baidu.com/s/1hq3iBGwhtml
準備的文件java
在新版本號的ADT上安裝NDK環境很是方便。個人ADT版本號是V22.0.5,版本號號在打開ADT載入時會顯示出來android
在官網上:http://developer.android.com/tools/sdk/ndk/index.html下載最新的NDK。NDK版本號在r7以上以後就集成了Cygwin。不需要單獨去安裝Cygwinc++
一、Eclipse配置app
SDK配置ide
NDK配置,路徑就是解壓出來的NDK根文件夾post
下面就來測試下NDK是否已經成功安裝ui
隨便新建一個Androidproject,加入Add Native Supportgoogle
此時新建的project就多了一個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, ϵͳÕҲ»µ½ָ¶
project右鍵。選擇下面選項
環境變量設置NDKROOT,Value就是你解壓出來的NDK文件夾
在這裏配置的:${NDKROOT}/ndk-build.com就是下面腳本文件
這時再去Cleanproject就不會報錯了
下面就來編寫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 := NDKTest LOCAL_SRC_FILES := NDKTest.cpp include $(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 project
成功經過
再執行程序,很是不幸。報錯了
假設是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自帶的樣例。