Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9463952
  • 博文数量: 1750
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20091
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1750)

文章存档

2024年(26)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2009-09-29 18:23:01

昨天做的,今天记录一下供同志们参考。

能够实现
  • java调用C API
  • C 调用java API
  • C 异步调用java API,用于C中做异步处理过程(例如信号处理句柄,异步事件处理)中需要回调java api的情况,示例为定时器异步处理调用java的情况。
 
 下载android-ndk-1.5_r1-linux-x86.zip也就是 android 所谓的NDK, 下载地址以及配置方法见我其他的文章。

在 sources目录下做librfid目录,目录里边的文件拷贝自 sources/examples/tow-libs/进行修改配置, 这里边主要是完成和硬件相关的C库的实现(JNI接口文件和通用C接口)


#Android.mk

#========================================================================

LOCAL_PATH:= $(call my-dir)

# static lib just for func
#
include $(CLEAR_VARS)

LOCAL_MODULE := librfidfunc
LOCAL_SRC_FILES := func.c

include $(BUILD_STATIC_LIBRARY)

# dync lib of rfid included jni
#
include $(CLEAR_VARS)

LOCAL_MODULE := librfid
LOCAL_SRC_FILES := jni.c

LOCAL_STATIC_LIBRARIES := librfidfunc
LOCAL_SHARED_LIBRARIES := liblog

include $(BUILD_SHARED_LIBRARY)


#func.c

#========================================================================

#include <string.h>
#include <stdio.h>
#include "func.h"

const char *rfid_read()
{
    static int idx=10000;
    static char buff[100];
    memset(buff, 0, sizeof(100));
    
    sprintf(buff, "cardno=[%08x]", idx++);
    return buff;
}

int rfid_daemon()
{
    return 1001;
}

void rfid_callback()
{
    
}

#func.h
#ifndef FUNC_H
#define FUNC_H

extern const char *rfid_read();
extern int rfid_daemon();
extern void rfid_callback();

#jni.c
#endif /* FUNC_H */
#include "func.h"
#include <jni.h>
#include <android/log.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <stdbool.h>

JNIEXPORT jstring JNICALL
Java_com_xino_rfid_RfidApp_doRead( JNIEnv* env, jobject thiz )
{
    return (*env)->NewStringUTF(env, rfid_read());
}

JNIEXPORT jint JNICALL
Java_com_xino_rfid_RfidApp_doDaemon( JNIEnv* env, jobject thiz )
{
    return rfid_daemon();
}


static int idx=0;
static char buff[100];
/* //

阅读(5646) | 评论(2) | 转发(0) |
0

上一篇:android 硬件守护程序配置

下一篇:idea 6410

给主人留下些什么吧!~~

chinaunix网友2010-08-30 18:56:36

我的邮箱是sun_jin_liang@163.com,谢谢你了!

chinaunix网友2010-08-30 18:55:02

你好,首先谢谢你提供的代码。我最近在学习android。我下载了你的代码,在模拟器上跑了一下。有个问题向你请教:直接跑你的程序用你编译好的so没有问题。但是自己编译的时候报错,make: *** 没有规则可以创建“out/apps/librfid//librfid.so”需要的目标“out/apps/librfid//liblog.so”。 停止。 我的解决办法是:把android.mk修改了一下,注释掉了#LOCAL_SHARED_LIBRARIES := liblog然后添加了一句 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog编译成功。但是运行的时候,点击“注册(native call java)”出现问题: I/native ( 1116): starting proc signal .... I/native ( 1116): just in doTimer. 1 I/native ( 1116): just in doTimer. 2 I/native ( 1116): just in doTimer. 3 D/