android 底层照相jni,Android底层开发(二)之JNI层

1 源文件LedHalService.cpp

#include

#include

#include

#include

#include

#include

struct led_control_device_t *led_hal_device = NULL;

static jboolean led_setOn(JNIEnv* env, jobject thiz, jint led)

{

LOGI("Led HAL JNI: led_setOn() is invoked.");

if (led_hal_device == NULL)

{

LOGI("Led HAL JNI: led_hal_device was not fetched correctly.");

return -1;

}

else

{

return led_hal_device->set_on(led_hal_device, led);

}

}

static jboolean led_setOff(JNIEnv* env, jobject thiz, jint led)

{

LOGI("Led HAL JNI: led_setOff() is invoked.");

if (led_hal_device == NULL)

{

LOGI("Led HAL JNI: led_hal_device was not fetched correctly.");

return -1;

}

else

{

return led_hal_device->set_off(led_hal_device, led);

}

}

static inline int led_control_open(const struct hw_module_t* module,

struct led_control_device_t** device)

{

return module->methods->open(module, LED_HARDWARE_MODULE_ID,

(struct hw_device_t**) device);

}

static jboolean led_init(JNIEnv *env, jclass clazz)

{

led_module_t* module;

LOGE("**********start find hal *********");

LOGE(LED_HARDWARE_MODULE_ID);

if (hw_get_module(LED_HARDWARE_MODULE_ID, (const hw_module_t**) &module)

== 0)

{

LOGI("LedService JNI: LED Stub found.");

if (led_control_open(&module->hw_module, &led_hal_device) == 0)

{

LOGI("LedService JNI: Got Stub operations.");

return 0;

}

}

LOGE("LedService JNI: Get Stub operations failed.");

return -1;

}

//定义JNI函数映射

static const JNINativeMethod methods[] =

{

{ "_init", "()Z", (void *) led_init },

{ "_set_on", "(I)Z", (void *) led_setOn },

{ "_set_off", "(I)Z", (void *) led_setOff }, };

//将JNI程序与java类库绑定

int register_led_hal_jni(JNIEnv* env)

{

static const char* const kClassName ="mobile/android/leds/hal/service/LedHalService";// 必须由该类调用当前的JNI程序库.

jclass clazz;

clazz = env->FindClass(kClassName);

if (clazz == NULL)

{

LOGE("Can‘t find class %s\n", kClassName);

return -1;

}

if (env->RegisterNatives(clazz, methods,

sizeof(methods) / sizeof(methods[0])) != JNI_OK)

{

LOGE("Failed registering methods for %s\n", kClassName);

return -1;

}

return 0;

}

//系统成功装载后会成功调用JNI_OnLoad函数   用于JNI模块初始化

jint JNI_OnLoad(JavaVM* vm, void* reserved)

{

JNIEnv* env = NULL;

jint result = -1;

if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)

{

LOGE("GetEnv failed!");

return result;

}

register_led_hal_jni(env);

return JNI_VERSION_1_4;

}

2  Android.mk文件

# Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng

LOCAL_MODULE:= led_hal_jni

# LOCAL_MODULE_PATH := /root/drivers/s3c6410_leds_hal/leds_hal_jni

LOCAL_MODULE_PATH := /home/litingting/妗岄潰/led_hal_jni

LOCAL_SRC_FILES:= LedHalService.cpp

LOCAL_SHARED_LIBRARIES := \

libandroid_runtime \

libcutils \

libhardware \

libhardware_legacy \

libnativehelper \

libsystem_server \

libutils \

libui \

libsurfaceflinger_client

LOCAL_C_INCLUDES += \

$(JNI_H_INCLUDE) \

hardware/leds_hal

LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)

3 建立链接再编译

先与安卓源码建立链接   ln -s     ..../leds_hal_jni   ......Android_SC/leds_hal_jni

再进行编译  mm  生成led_hal_jni.so  、

将led_hal_jni.so 传到开发板的/system/lib目录

原文:http://blog.csdn.net/u012590688/article/details/46358667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值