Android JNI总结
JNI总结
JNI有多重实现方式,一下会详细讲解多种方式:
1 应用级
用eclipse构建一个应用程序,JNITest1。
Xml代码
< ?xml version="1.0" encoding="utf-8"?>
< LinearLayout xmlns:android=
"http://schemas.A/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
< TextView
Android:id="@+id/JNITest"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/JNITest"
/>
< /LinearLayout>
JAVA代码:
package com.jni.test;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class JNITest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String str=GetTest();
TextView tv=(TextView)findViewById(R.id.JNITest);
tv.setText(str);
}
static{
System.loadLibrary("JNITest1");//libJNITest1.so
}
public native String GetTest();
}
在java文件生成class文件后,进入工程根目录,使用如下命令:
javah -classpath bin -d jni com.jni.test.JNITest
会在根目录下生成jni目录:
com_jni_test_JNITest.h如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
#ifndef __com_jni_test_JNITest__
#define __com_jni_test_JNITest__
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT jstring JNICALL Java_com_jni_test_JNITest_GetTest (JNIEnv *env, jobject);
#ifdef __cplusplus
}
#endif
#endif /* __com_jni_test_JNITest__ */
在external目录下,建立目录TestJNI/libJNITest1,将com_jni_test_JNITest.h复制到该目录下,建立a.c如下:
#include "com_jni_test_JNITest.h"
#define LOG_TAG "JNITest"
#undef LOG
#include
JNIEXPORT jstring JNICALL Java_com_jni_test_JNITest_GetTest
(JNIEnv *env, jobject fggg)//一定要补上
{
return (*env)->NewStringUTF(env,(char *)"JNITest1 native String");
LOGD("Hello LIB!\n");
}
编写Android.mk文件,内容如下:
LOCAL_PATH:=$(call my-dir)