chinaunix网友2009-12-28 08:03
分析文件:
hardware/libhardware_legacy/gps/Android.mk
===============================
# Use hardware GPS implementation if available.
#
ifneq ($(BOARD_GPS_LIBRARIES),)
LOCAL_CFLAGS += -DHAVE_GPS_HARDWARE
LOCAL_SHARED_LIBRARIES += $(BOARD_GPS_LIBRARIES)
endif
# Use emulator GPS implementation if QEMU_HARDWARE is set.
#
USE_QEMU_GPS_HARDWARE := $(QEMU_HARDWARE)
ifeq ($(USE_QEMU_GPS_HARDWARE),true)
LOCAL_CFLAGS += -DHAVE_QEMU_GPS_HARDWARE
LOCAL_SRC_FILES += gps/gps_qemu.c
endif
LOCAL_SRC_FILES += gps/gps.cpp
===============================
因为文件 hardware/libhardware_legacy/Android.mk 中有:
ifneq ($(TARGET_SIMULATOR),true)
LOCAL_CFLAGS += -DQEMU_HARDWARE
QEMU_HARDWARE := true
endif
当编译的是模拟器版本的时候 QEMU_HARDWARE 为true,所以使用的是模拟的gps调用。
如果编译相关的硬件版本,那么必须给 BOARD_GPS_LIBRARIES 赋值,因为从语句:
LOCAL_SHARED_LIBRARIES += $(BOARD_GPS_LIBRARIES) 可以看出,变量
BOARD_GPS_LIBRARIES 指定的应该是一个库的名称,通常为 libgps,也可以自定义
对于变量 BOARD_GPS_LIBRARIES 我们可以在文件:
vendor/marvell/littleton/BoardConfig.mk
或者
vendor/htc/dream-open/BoardConfig.mk
里面进行指定。
BOARD_GPS_LIBRARIES := libgps librpc
BOARD_GPS_LIBRARIES := libgps
指定变量 BOARD_GPS_LIBRARIES 表明我们依赖的是外部库 libgps.so,所以我们还必须
准备一个libgps.so 库,由它完成实际的gps调用
========================
libgps.so 是gps接口:
./hardware/libhardware_legacy/include/hardware_legacy/gps.h
的实现,所以根据不同的硬件,libgps.so的实现方式是不一样的,但是接口一致。
关于怎样添加一个 gps 库,可以参考文档:
http://www.netmite.com/android/mydroid/cupcake/development/pdk/docs/gps.html