/*
//java
*/
public class MainActivity extends Activity {
private static int si;
public static void callback(){//该方法将被下段C代码调用
si = 123;
}
public native String getStringFromC();//原生实例方法
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
textView.setText(getStringFromC());
}
static{
System.loadLibrary("hello");
}
}
/*
//NDK C
*/
JNIEXPORT jstring JNICALL Java_com_child_hellondk_MainActivity_getStringFromC
(JNIEnv *env, jobject thiz){//该处为jobject类型,因为Java中的getStringFromC为实例方法,无static关键字
jint si; //定义int型变量,用来存储显示java代码中si变化后的值
jfieldID fid; //store the field ID
jclass cls = (*env)->GetObjectClass(env, thiz);
jmethodID mid = (*env)->GetStaticMethodID(env, cls, "callback", "()V");
if (mid == NULL){
return (*env)->NewStringUTF(env, "mid = NULL")
}
//调用Java程序的callback方法,其中,mid中的方法ID就是"callback"
(*env)->CallStaticVoidMethod(env, cls, mid);
fid = (*env)->GetStaticFieldID(env, cls, "si", "I");
if(fid == NULL){
return (*env)->NewStringUTF(env, "fid = NULL");
}
si = (*env)->GetStaticIntField(env, cls, fid);
return (*env)->NewStringUTF(env, "Hello from JNI !");
}