libusbをAndroid用にポーティングする
お仕事で必要があってlibusbをAndroidに持っていくということをやりました。
この記事はlibusbをAndroid用にbuildする方法の備忘録です。
まず、Androidをlibusbにportingするのは先人が既にやっているので、そこを参考にします。
参考URL: http://android.serverbox.ch/?p=151
- androidのソースコードをもってきます。 -> ここ「Downloading the Source Tree | Android Open Source」を参考に。
- androidのソースコードをbuildします。
- externalの下にlibusbというディレクトリを切ります。
- libusbのソースを展開します。現在の最新版は「libusb-1.0.9」です。
- "external/libusb"の直下に「Android.mk」を作成します。
- "external/libusb/libusb"にも「Android.mk」を作成します。
- "external/libusb/libusb/io.c"を修正します。
- 「mm」でlibusbをbuildします。
androidのbuildは、もってきたsource codeのトップで
$ source build/envsetup.sh
$ lunch
$ make
とかやってください。
libusbの直下に作成するAndroid.mkはこんな感じです。
LOCAL_PATH := $(call my-dir) subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, libusb)) include $(subdirs)
元にしているページのAndroid.mkは"subdirs"の頭の"s"が取れてしまっているので注意しましょう。
"external/libusb/libusb"の下に作成するAndroid.mkはこんな感じです。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS:=-DLIBUSB_DESCRIBE LOCAL_SRC_FILES:= \ core.c \ descriptor.c \ io.c \ sync.c \ os/linux_usbfs.c \ os/threads_posix.c LOCAL_C_INCLUDES += \ external/libusb/ \ external/libusb/libusb/ \ external/libusb/libusb/os LOCAL_MODULE:= libusb LOCAL_MODULE_TAGS:=eng LOCAL_PRELINK_MODULE:=false include $(BUILD_SHARED_LIBRARY)
"libusb-1.0.9"以外のバージョンでは何らかの修正が必要になるかもしれません。
その場合は適宜修正して下さい。
あと、この方法でビルドはできると思いますが、ビルド後のバイナリの動作を保証するものではありません。