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:
Application.mk:
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-buildApplication.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:
Publier un commentaire