1、Android应用层代码:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
public class NdkLoad extends Activity {
public static final String TAG="skywang--NdkLoad";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.d(TAG, "on create");
TextView myTextView = new TextView(this);
myTextView.setText( HelloLoad() );
setContentView(myTextView);
}
// jni中注册的方法
public native String HelloLoad();
static {
// 加载本地libndk_load.so库文件
System.loadLibrary("ndk_load");
}
}
public native String HelloLoad(); 这句话的作用是声明HelloLoad()这个本地方法。HelloLoad()是通过jni中注册到Android的方法,具体的实现在libndk_load.so中。
System.loadLibrary("ndk_load"); 这个函数的作用是加载libndk_load.so库文件。由于定义在NdkLoad类的static函数体中,所以在建立NdkLoad这个Acitivity时就会执行。
下面介绍ndk_load的具体实现。
我们知道,系统初始化JNI在加载时,会调用JNI_OnLoad(),而卸载时会调用JNI_UnLoad();所以,我们可以通过重写JNI_OnLoad(),在JNI_OnLoad()中将函数注册到Android中,以便能通过Java访问。在本文中,我们就是重写JNI_OnLoad()函数实现ndk_load库。