libusbをAndroid用にポーティングする

お仕事で必要があってlibusbをAndroidに持っていくということをやりました。
この記事はlibusbをAndroid用にbuildする方法の備忘録です。

まず、Androidをlibusbにportingするのは先人が既にやっているので、そこを参考にします。
参考URL: http://android.serverbox.ch/?p=151

  1. androidソースコードをもってきます。 -> ここ「Downloading the Source Tree | Android Open Source」を参考に。
  2. androidソースコードをbuildします。
  3. externalの下にlibusbというディレクトリを切ります。
  4. libusbのソースを展開します。現在の最新版は「libusb-1.0.9」です。
  5. "external/libusb"の直下に「Android.mk」を作成します。
  6. "external/libusb/libusb"にも「Android.mk」を作成します。
  7. "external/libusb/libusb/io.c"を修正します。
  8. 「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"以外のバージョンでは何らかの修正が必要になるかもしれません。
その場合は適宜修正して下さい。
あと、この方法でビルドはできると思いますが、ビルド後のバイナリの動作を保証するものではありません。