mercredi 16 décembre 2015

Compilation du Gesture Recognition Toolkit sur Android

Pour ne pas avoir à développer la partie reconnaissance de mouvement j'ai recherché des bibliothèques existantes. Mon choix s'est porté sur le GRT (Gesture Recognition Toolkit) de Nick Gillian.

Pour le faire fonctionner sur Android je me suis basé sur cet article http://hollyhook.de/wp/grt-for-android

Le but est de compiler le code C++ en une bibliothèque libgrt.so que l'on intégrera dans notre APK et que l'on utilisera via JNI.

Le processus pour compiler le GRT en NDK est le suivant:

- Créer un projet vierge sous Android Studio.
- Spécifier le répertoire dans lequel on va placer le fichier .so et désactiver la compilation du NDK en ajoutant dans gradle:
sourceSets {
     main {
         jniLibs.srcDir 'jniLibs' // spécification du répertoire de libs JNI
         jni.srcDirs = [] // désactivation compilation NDK
     }
}

Copier ensuite (un lien sympbolique marche aussi) le code source du GRT dans GRTApp/app/src/main/jni. La structure de l'application est la suivante:
GRTApp
app
     build
     libs
     src
         main
             java
                 com/codeflakes/grtapp
                 org/swig/grt
             jni
                 grt
             jniLibs
             libs
                 armeabi-v7a
             res
         test
         androidTest
build
gradle
Ajouter les Android.mk et Application.mk suivants dans ./jni pour pouvoir compiler avec ndk-build

Application.mk: NDK_TOOLCHAIN_VERSION := clang
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_ABI := armeabi-v7a
Android.mk:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(info $(LOCAL_PATH))

HEADER_FILES_LIST := $(wildcard $(LOCAL_PATH)/grt/*.h)
HEADER_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*.h)
HEADER_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*.h)
HEADER_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*/*.h)
HEADER_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*/*/*.h)
#$(info $(HEADER_FILES_LIST))
LOCAL_C_INCLUDES := $(HEADER_FILES_LIST:$(LOCAL_PATH)/%=%)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/grt/

LOCAL_MODULE    := grt

SRC_FILES_LIST := $(wildcard $(LOCAL_PATH)/grt/*.cpp)
SRC_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*.cpp)
SRC_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*.cpp)
SRC_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*/*.cpp)
SRC_FILES_LIST += $(wildcard $(LOCAL_PATH)/grt/*/*/*/*/*.cpp)
#$(info $(SRC_FILES_LIST))
LOCAL_SRC_FILES := $(SRC_FILES_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += $(LOCAL_PATH)/grt_wrap.cpp

LOCAL_CPPFLAGS += -std=c++11
LOCAL_LDLIBS   += -latomic
LOCAL_LDLIBS   += -llog

include $(BUILD_SHARED_LIBRARY) 

Aucun commentaire:

Enregistrer un commentaire