Skip to content

Commit dfd4eaf

Browse files
CismonXxlz
authored andcommitted
Add android build script and instructions (#1060)
1 parent c67e3b0 commit dfd4eaf

File tree

6 files changed

+133
-0
lines changed

6 files changed

+133
-0
lines changed

platform/android/README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Build libfreenect2 for Android
2+
3+
## 1. Requirements
4+
5+
* A latest release of Android NDK.
6+
* A rooted Android device with USB3.0 host.
7+
8+
## 2. Build libusb
9+
10+
* See the [official documentation](https://github.com/libusb/libusb/blob/master/android/README) for instructions to build libusb for Android.
11+
* Due to [certain modifications](https://github.com/libusb/libusb/commit/2f3bc98b0d0f4766496df53c855685a5f0e5e7cf), libusb can no longer be used directly on Android. Grab a latest available [release](https://github.com/libusb/libusb/releases/tag/v1.0.22) instead.
12+
* The arm64-v8a build of libusb segfaults, use an armeabi-v7a build instead if you are running Android on arm64.
13+
14+
## 3. Build libturbojpeg
15+
16+
* See the [official documentation](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/BUILDING.md) for instructions to build libturbojpeg for Android.
17+
* May encounter problems when using the master branch of libturbojpeg with libfreenect2. However, [2.0.1 release](https://github.com/libjpeg-turbo/libjpeg-turbo/releases/tag/2.0.1) and older versions work well.
18+
19+
## 4. Build libfreenect2
20+
21+
* Grab libfreenect2 and change into Android build directory.
22+
23+
```bash
24+
git clone https://github.com/OpenKinect/libfreenect2.git
25+
cd libfreenect2/platform/android/jni
26+
```
27+
28+
* Build libfreenect2 with Android NDK.
29+
30+
```bash
31+
/path/to/ndk-build \
32+
LIBUSB_ROOT=/path/to/libusb/root \
33+
LIBUSB_SHARED_REL=relative/path/to/libusb1.0.so \
34+
LIBTURBOJPEG_ROOT=/path/to/libturbojpeg \
35+
LIBTURBOJPEG_SHARED_REL=relative/path/to/libturbojpeg.so
36+
```
37+
38+
* You will find the built binaries in platform/android/libs.
39+
40+
## 5. Notes
41+
42+
* Now we can only use CPU for depth packet processing. OpenGL ES on Android should work, but it's not yet supported.

platform/android/jni/Android.mk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
LOCAL_PATH := $(call my-dir)
3+
4+
include $(LOCAL_PATH)/libfreenect2.mk
5+
include $(LOCAL_PATH)/examples.mk

platform/android/jni/Application.mk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
APP_ABI := armeabi-v7a
3+
APP_PLATFORM := android-21
4+
APP_STL := c++_shared
5+
APP_CPPFLAGS := -fexceptions -std=c++11

platform/android/jni/examples.mk

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
include $(CLEAR_VARS)
3+
4+
LIBFREENECT2_ROOT := ../../..
5+
6+
LOCAL_SRC_FILES := $(LIBFREENECT2_ROOT)/examples/Protonect.cpp
7+
8+
LOCAL_C_INCLUDES += \
9+
$(LIBFREENECT2_ROOT)/include \
10+
$(LIBFREENECT2_ROOT)/platform/android
11+
12+
LOCAL_SHARED_LIBRARIES += libfreenect2
13+
14+
LOCAL_MODULE := Protonect
15+
16+
include $(BUILD_EXECUTABLE)

platform/android/jni/libfreenect2.mk

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
LIBFREENECT2_ROOT := ../../..
3+
4+
include $(CLEAR_VARS)
5+
LOCAL_MODULE := libusb
6+
LOCAL_SRC_FILES := $(LIBUSB_ROOT)/$(LIBUSB_SHARED_REL)
7+
include $(PREBUILT_SHARED_LIBRARY)
8+
9+
include $(CLEAR_VARS)
10+
LOCAL_MODULE := libturbojpeg
11+
LOCAL_SRC_FILES := $(LIBTURBOJPEG_ROOT)/$(LIBTURBOJPEG_SHARED_REL)
12+
include $(PREBUILT_SHARED_LIBRARY)
13+
14+
include $(CLEAR_VARS)
15+
16+
LIBFREENECT2_SRC := $(LIBFREENECT2_ROOT)/src
17+
18+
LOCAL_C_INCLUDES += \
19+
$(LIBUSB_ROOT)/libusb \
20+
$(LIBTURBOJPEG_ROOT) \
21+
$(LIBFREENECT2_ROOT)/include \
22+
$(LIBFREENECT2_ROOT)/include/internal \
23+
$(LIBFREENECT2_SRC)/tinythread \
24+
$(LIBFREENECT2_ROOT)/platform/android
25+
26+
LOCAL_SRC_FILES := \
27+
$(LIBFREENECT2_SRC)/tinythread/tinythread.cpp \
28+
$(LIBFREENECT2_SRC)/allocator.cpp \
29+
$(LIBFREENECT2_SRC)/command_transaction.cpp \
30+
$(LIBFREENECT2_SRC)/cpu_depth_packet_processor.cpp \
31+
$(LIBFREENECT2_SRC)/depth_packet_processor.cpp \
32+
$(LIBFREENECT2_SRC)/depth_packet_stream_parser.cpp \
33+
$(LIBFREENECT2_SRC)/event_loop.cpp \
34+
$(LIBFREENECT2_SRC)/frame_listener_impl.cpp \
35+
$(LIBFREENECT2_SRC)/libfreenect2.cpp \
36+
$(LIBFREENECT2_SRC)/logging.cpp \
37+
$(LIBFREENECT2_SRC)/packet_pipeline.cpp \
38+
$(LIBFREENECT2_SRC)/registration.cpp \
39+
$(LIBFREENECT2_SRC)/resource.cpp \
40+
$(LIBFREENECT2_SRC)/rgb_packet_processor.cpp \
41+
$(LIBFREENECT2_SRC)/rgb_packet_stream_parser.cpp \
42+
$(LIBFREENECT2_SRC)/transfer_pool.cpp \
43+
$(LIBFREENECT2_SRC)/turbo_jpeg_rgb_packet_processor.cpp \
44+
$(LIBFREENECT2_SRC)/usb_control.cpp
45+
46+
LOCAL_SHARED_LIBRARIES += libusb libturbojpeg
47+
48+
LOCAL_MODULE := libfreenect2
49+
50+
include $(BUILD_SHARED_LIBRARY)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#ifndef LIBFREENECT2_CONFIG_H
2+
#define LIBFREENECT2_CONFIG_H
3+
4+
#define LIBFREENECT2_VERSION "0.2.0"
5+
#define LIBFREENECT2_API_VERSION ((0 << 16) | 2)
6+
7+
#define LIBFREENECT2_PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
8+
9+
#define LIBFREENECT2_API __attribute__((visibility("default")))
10+
11+
#define LIBFREENECT2_WITH_TURBOJPEG_SUPPORT
12+
#define LIBFREENECT2_THREADING_STDLIB
13+
#define LIBFREENECT2_WITH_CXX11_SUPPORT
14+
15+
#endif // LIBFREENECT2_CONFIG_H

0 commit comments

Comments
 (0)