开发环境:
ubuntu 10.10 + eclipse + adt +android ndk + ?android sdk
?
1、新建简单项目:JNIDemo,
设计jni到java类:
?
package com.lt.jni
public class JNI { /** * call the native printf method to print */ public native void print(); public native String sayHello();}?
2、在android到bin目录下,执行命令:
javah -jni com.lt.jni.JNI 来生成头文件:com_lt_jni_JNI.h
?
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_lt_jni_JNI */#ifndef _Included_com_lt_jni_JNI#define _Included_com_lt_jni_JNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *, jobject);/* * Class: com_lt_jni_JNI * Method: sayHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
?
3、在项目目录下,新建jni目录,并新建c源文件com_lt_jni_JNI.c:
#include <jni.h>#include <stdio.h>#include <string.h>#include <android/log.h>#include "com_lt_jni_JNI.h"/* * Class: com_lt_jni_JNI * Method: print * Signature: ()V */JNIEXPORT void JNICALL Java_com_lt_jni_JNI_print (JNIEnv *env, jobject obj){ __android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_print"); printf("Hello world!\n"); return ;}JNIEXPORT jstring JNICALL Java_com_lt_jni_JNI_sayHello (JNIEnv *env, jobject obj){ __android_log_print(ANDROID_LOG_INFO,"JNI","Java_com_lt_jni_JNI_sayHello"); return (*env)->NewStringUTF(env,"Hello JNI");}?
?
关键代码:#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO,"TAG","log info");
?
4、在jni目录下新建Android.mk文件:
?
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
?
LOCAL_SRC_FILES:=\
com_lt_jni_JNI.c
?
LOCAL_CFLAGS := -O2 -g
#LOCAL_CFLAGS += -D__FAVOR_BSD
?
?
#LOCAL_C_INCLUDES += \
# bionic/libc/include\
# external/libpcap
LOCAL_C_INCLUDES := \
? ? $(JNI_H_INCLUDE)
?
#LOCAL_STATIC_LIBRARIES += libpcap
?
#LOCAL_SHARED_LIBRARIES += libssl libcrypto
?
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
?
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
?
#LOCAL_MODULE_TAGS := eng
?
LOCAL_MODULE := helloworld
?
include $(BUILD_SHARED_LIBRARY)
?