package com.android.jni;
public class JniTest {
public static native String hello ();
}
#include "com_android_jni_JniTest.h"
#include <stdio.h>
/*
* Class: com_android_jni_JniTest
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_android_jni_JniTest_hello
(JNIEnv * env, jclass cla){
return (*env)->NewStringUTF(env, "hello");
}
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JniTest
LOCAL_SRC_FILES := JniTest.c
include $(BUILD_SHARED_LIBRARY)
該文件中的一些變量對應的含義如下:
LOCAL_SRC_FILES -編譯的源文件
LOCAL_MODULE -編譯的目標對象
package com.android.jni;
public class JniTest {
static {
System. loadLibrary("JniTest"); //加載so動態鏈接庫
}
public static native String hello();
}
package com.android.test;
import com.android.jni.JniTest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class TestActivity extends Activity {
private TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. main);
tv=(TextView)findViewById(R.id. tv);
tv.setText(JniTest.hello());
}
}
main.xml:
<?xml version="1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"
android:orientation="vertical" >
<TextView
android:id= "@+id/tv"
android:layout_width= "fill_parent"
android:layout_height= "wrap_content"
android:text= "@string/hello" />
</LinearLayout>
運行結果如下:
JNIEXPORT jstring JNICALL Java_com_android_jni_JniTest_hello
(JNIEnv *, jclass){
return (*env)->NewStringUTF(env, "hello");
}