MISE À JOUR: Il semble y avoir un problème avec std :: atomique sur Android, et depuis Boost.Asio l'utilise (par défaut), associées à des fils, un de temps en temps se est dans l'impasse. Heureusement Boost.Asio le rend facile de passer de Std.Atomic à Boost.Atomic et cela a été pris en compte dans le projet Boost-for-Android en this commit.
Pour plus d'informations sur le bug, voir here
Nous développons un jeu simple multijoueur (pas encore sorti) pour Android en utilisant asio boost et jusqu'à présent, nous ne l'avons pas eu de problème. C'est pour la question # 2.
Quels types de problèmes voyez-vous?
Si les problèmes sont liés à la compilation et à la liaison, ces conseils peuvent s'avérer utiles.
Ajouter suivante dans votre fichier AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
ceci dans votre fichier Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions
et l'utiliser comme modèle pour votre fichier Android.mk:
LOCAL_PATH := $(call my-dir)
BOOST_VERSION := 1_49
PROJECT_ROOT := $(LOCAL_PATH)/../../../..
BOOST_INCLUDE_PATH := /path/to/boost/headers
BOOST_LIB_PATH := /path/to/boost/libraries
# Path and name of the STL library. Add this to the *end* of LOCAL_LDLIBS.
# Note this is a hack/workaround to prevent linker errors when compiling with
# boost.
STL_LIBS := -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \
-lgnustl_static
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH) \
$(PROJECT_ROOT)/src \
$(PROJECT_ROOT)/platform/android/jni
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS := -llog -landroid
# The order of these libraries is often important.
LOCAL_LDLIBS += -L$(BOOST_LIB_PATH) \
-lboost_system-gcc-mt-$(BOOST_VERSION) \
-lboost_thread-gcc-mt-$(BOOST_VERSION) \
$(STL_LIBS)
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
EDIT: Comment nous construisons boost pour Android. Voici ce que nous avons dans notre Makefile:
git clone git://github.com/madadam/Boost-for-Android.git
./build-android.sh --boost=1.49.0 --with-libraries=chrono,program_options,system,thread /path/to/ndk
Notez que nous utilisons notre propre fourchette de Boost-pour Android, c'est seulement parce que l'on a un patch pour la nouvelle version NDK R8D. On peut également voir à partir de la ligne de commande que nous utilisons la version 1.49 de boost, c'est actuellement le plus haut supporté par Boost-for-Android.
Si vous souhaitez connaître les combinaisons de Boost et Android NDK prises en charge, jetez un coup d'œil au projet Boost-for-Android. Il contient des répertoires appelés patches/Boost < X>/NDK Android < Y> où X correspond à la version boost pris en charge et Y à la version NDK pris en charge (prise sans vergogne: nos 2 cents à la projet :-)).
Techniquement, vous voulez un support officiel pour ces plates-formes au lieu de _ports_. –
est boost conseillé pour le développement d'applications smartphone du tout? – RDX
FWIW, j'ai construit avec succès mon application (qui utilise beaucoup boost) à la fois pour iOS et pour Android. Je crois que la raison principale du manque de soutien «officiel» est le fait que personne ne s'est porté volontaire pour exécuter des tests de version pour ces plateformes. –