请问你怎么写jni模块吗?这是自己写的led.c文件
#include <jni.h>
#include <android/log.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define DEVICE_NAME "/dev/leds"
#define LOG_TAG "vib-jni"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
jstring Java_com_auly_control_vibClalss_stringFromJNI( JNIEnv* env,jobject thiz);
jint Java_com_auly_control_vibClalss_Init( JNIEnv* env );
jint Java_com_auly_control_vibClalss_IOCTLVIB( JNIEnv* env, jobject thiz, jint ledx, jint controlcode );
int fd;
jstring Java_com_auly_control_vibClalss_stringFromJNI( JNIEnv* env,jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI--Peter for vib!");//打印字符串
}
jint Java_com_auly_control_vibClalss_Init( JNIEnv* env )
{
LOGE("vibClass_Init() /n");
fd = open(DEVICE_NAME,0);//打开设备
LOGE("vibClass_Init()-> fd = %d /n",fd);
if(fd == -1)
{
LOGE("open device %s error /n ",DEVICE_NAME);//打印调试信息
return 0;
}
else
{
return 1;
}
}
jint Java_com_auly_control_vibClalss_IOCTLVIB( JNIEnv* env, jobject thiz, jint ledx, jint controlcode )
{
int on_off = controlcode;
int on=ledx;
LOGE("IOCTLVIB() = %x --vibClass_IOCTLVIB /n",on_off);
switch(on_off)
{
case 0:
{
ioctl(fd,on,0);//调用驱动程序中的ioctrl接口,把命令VIB_ON传下去,实现硬件操作
break;
}
case 1:
{
ioctl(fd,on,1);//调用驱动程序中的ioctrl接口,把命令VIB_OFF传下去,实现硬件操作
break;
}
default:break;
}
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := vib-jni
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := vib-jni.c
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
用cygwin编译生成了.SO文件
但是在运行apk的时候 应用程序老是出错!请求告诉解答!
[ 此帖被xuezi0414在2011-11-25 16:52重新编辑 ]