1、建立一個類叫JNI.javajava
public class JNI { public native String sayHello(); }
2、進入dos下,切換到項目下的bin\classes文件夾,使用javah命令編譯JNI.classandroid
javah com.demo.ndkdemo.JNIc++
編譯成功後,會出現一個頭文件ide
com_demo_ndkdemo_JNI.hui
3、在項目根目錄下新建文件夾,名稱叫jni,此名字不能隨便取,只能叫jnispa
將編譯好的頭文件拷貝到該文件夾下code
新建文件Android.mk,編輯以下內容xml
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := AndroidJNI //這個是你要編譯的so文件名稱,不要加lib,編譯好後:libAndroidJNI.so LOCAL_SRC_FILES := AndroidJNI.cpp //這個是要編譯的c++源文件 include $(BUILD_SHARED_LIBRARY)
#include "com_demo_ndkdemo_JNI.h" using namespace std; JNIEXPORT jstring JNICALL Java_com_demo_ndkdemo_JNI_sayHello(JNIEnv *env, jobject obj) { return env->NewStringUTF("Hello NDK!"); }
4、打開cygwin終端,切換到項目根目錄下,用NDK編譯utf-8
$NDK/ndk-buildstring
編譯完成後能夠看到libs文件夾下有libAndroidJNI.so文件,說明編譯成功
5、編寫Android文件
NDKDemoActivity.java
public class NDKDemoActivity extends Activity{ static { System.loadLibrary("AndroidJNI"); } private TextView txtView; private JNI jni; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); jni = new JNI(); txtView = (TextView) findViewById(R.id.txt_view); txtView.setText(jni.sayHello()); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/txt_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>