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>