UPDATE: Sembra che ci sia un problema con std :: atomica su Android, e dal momento che Boost.Asio sta usando (per impostazione predefinita), in combinazione con fili, uno di tanto in tanto ma ho un punto morto. Fortunatamente Boost.Asio rende facile passare da Std.Atomic a Boost.Atomic e questo è stato risolto nel progetto Boost-for-Android in this commit.
Per ulteriori informazioni sul bug, vedere here
Stiamo sviluppando un semplice gioco multiplayer (non ancora rilasciato) per Android utilizzando spinta ASIO e finora non abbiamo avuto alcun problema. Questo è per la domanda n. 2.
Che tipo di problemi vedi?
Se i problemi sono legati alla compilazione e al collegamento, forse questi suggerimenti si riveleranno utili.
Add segue al file AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
avere questo nel file Application.mk:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti -fexceptions
e utilizzare questo come un modello per il file 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)
MODIFICA: Come si genera boost per Android. Questo è ciò che abbiamo nel nostro 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
Si noti che stiamo usando la nostra forchetta di Boost-per-Android, questo è solo perché che si ha una patch per la versione più recente NDK r8d. Si può anche vedere dalla riga di comando che stiamo usando la versione 1.49 di boost, questo è attualmente il più alto supportato da Boost-per-Android.
Se si desidera sapere quali combinazioni di Boost e NDK Android sono supportate, dare un'occhiata all'interno del progetto Boost-per-Android. Esso contiene le directory denominati patch/Boost- < X>/NDK Android-< Y> dove X corrisponde alla versione spinta sostenuto e Y alla versione NDK supportata (spudorato: i nostri 2 centesimi al progetto :-)).
Tecnicamente vorresti un supporto ufficiale per quelle piattaforme invece di _ports_. –
è consigliato per lo sviluppo di applicazioni per smartphone? – RDX
FWIW, ho creato con successo la mia applicazione (che utilizza boost in modo piuttosto esteso) sia per iOS che per Android. Credo che il motivo principale per la mancanza di supporto "ufficiale" sia il fatto che nessuno si è offerto volontario per eseguire test di rilascio per questa piattaforma. –