配置完Android NDK工具后
1.新建一个Android项目,java文件下包含native方法
package com.dnfchan.ndktest; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class NDKTest2Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); TextView view=new TextView(this); int a=add(5,9); view.setText(""+a); setContentView(view); } public native int add(int x,int y); //本地方法1 public native int del(); //本地方法2,未调用 static{ System.loadLibrary("test-jni");//加载库,库名省略的前缀lib和后缀.so,实际库名是libtest-jni.so } }
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_dnfchan_ndktest_NDKTest2Activity */ #ifndef _Included_com_dnfchan_ndktest_NDKTest2Activity #define _Included_com_dnfchan_ndktest_NDKTest2Activity #ifdef __cplusplus extern "C" { #endif /* * Class: com_dnfchan_ndktest_NDKTest2Activity * Method: add * Signature: (II)I */ JNIEXPORT jint JNICALL Java_com_dnfchan_ndktest_NDKTest2Activity_add (JNIEnv *, jobject, jint, jint); /* * Class: com_dnfchan_ndktest_NDKTest2Activity * Method: del * Signature: ()I */ JNIEXPORT jint JNICALL Java_com_dnfchan_ndktest_NDKTest2Activity_del (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
#include <jni.h> //对应java文件的add()方法 JNIEXPORT jint JNICALL Java_com_dnfchan_ndktest_NDKTest2Activity_add (JNIEnv* env, jobject thiz, jint x, jint y){ return x+y; }
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:=test-jni LOCAL_SRC_FILES:=test-jni.c include $(BUILD_SHARED_LIBRARY)
第二行是指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量
第三行编译后的模块名
第四行编译的源码文件
第五行编译成共享库
5.利用ndk-build生成库,在工程根目录下运行ndk-build,出现下面信息是表示生成成功。
Compile thumb : test-jni <= test-jni.c SharedLibrary : libtest-jni.so Install : libtest-jni.so => libs/armeabi/libtest-jni.so