Oficial "Boost library" ¿Soporte para Android e iOS?

Esta pregunta está en la continuación de ¿Debo elegir Boost Asio o Aysnc Socket hilos en Android? preguntó,

Las bibliotecas Boost están diseñadas para ser ampliamente útiles y utilizables en una amplia gama de aplicaciones, pero aún no hay soporte oficial disponible para Android e iOS

  1. ¿Hay alguna razón específica detrás de la misma como no optimizado para dispositivos incrustados? ¿O por cualquier otra razón?
  2. ¿Alguien sabe de alguna aplicación construida usando Boost en Android o iOS?
  3. ¿Es aconsejable utilizar las bibliotecas de impulso para la aplicación de red intensa que genera múltiples hilos para commuication?

FYI .. He estado usando los siguientes enlaces para crear una aplicación de Android de muestra, pero no ha sido exitosa todavía 🙁

Https://github.com/MysticTreeGames/Boost-for-Android

Http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Incluye la biblioteca Boost C ++ en android

Cómo utilizar la biblioteca de impulso (incluyendo shared_ptr) con el Android NDK y STLport

Https://sites.google.com/site/fourdollars/android/android-mk

Https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/4lxhsKFe7Ho

Http://www.crystax.net/trac/ndk/ticket/6

Android NDK R5 y soporte de la excepción de C ++

Gracias por adelantado.

Respuesta recibida de la comunidad impulsora Sí. Estas plataformas no son oficialmente apoyadas porque nadie se ha ofrecido voluntariamente para realizar pruebas de regresión regularmente para ellos.

No es posible que un desarrollador Boost realice pruebas en todas las plataformas. Así que los desarrolladores dependen de los resultados de las pruebas de regresión realizadas por los voluntarios. Por ejemplo, consulte http://beta.boost.org/development/tests/trunk/developer/summary.html

Si nadie se ofrece voluntariamente para ejecutar las pruebas para una plataforma en particular, esa plataforma no es oficialmente compatible.

Así que si te interesa que Android o iOS se vuelvan oficialmente compatibles, comienza a ejecutar pruebas de regresión regulares (preferentemente diarias) para Boost. Consulte http://beta.boost.org/development/running_regression_tests.html

Echa un vistazo a mi cross-platform-tutorial en github. Le muestra cómo configurar Boost y utilizarlo entre iOS y Android. Tuve un tiempo horrible con esto, me imagino que lo documentaría para que nadie más tuviera que averiguarlo. Observará que este proyecto también extrae varios otros elementos comunes utilizados entre las dos plataformas, por ejemplo, CoreFoundation y SQLite.

https://github.com/markshiz/cross-platform-tutorial

Nota: Mi tutorial no muestra cómo crear las bibliotecas compiladas para aumentar. He hecho eso antes con éxito usando las instrucciones que usted proporcionó:

http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Después de tener una biblioteca estática compilada por la cadena de herramientas de Android, puede vincularla fácilmente a través de un módulo similar a los del directorio include/[NAME OF NEW SUBMODULE] del proyecto anterior. Utilice algo similar al siguiente para el archivo Android.mk en la raíz de ese directorio.

 include $(CLEAR_VARS) LOCAL_MODULE:= boost_regex LOCAL_SRC_FILES:= ./path/to/built/static/library/libboost_regex-gcc-mt-sa LOCAL_EXPORT_C_INCLUDES := ./path/to/the/directory/that/has/the/boost/headers include $(PREBUILT_STATIC_LIBRARY) 

Finalmente, importe ese módulo, como en el ejemplo, dentro

 $(call import-module,[NAME OF NEW SUBMODULE]) 

En cuanto a sus otras preguntas –¿usted sabe de una aplicación que utiliza Boost en iOS y Android? Sí, lo he hecho varias veces con éxito y he lanzado aplicaciones de trabajo a las tiendas de aplicaciones.

Su otra pregunta, ¿es aconsejable utilizar impulso para la comunicación en red? No estoy seguro de lo que quieres decir aquí. ¿Desde qué ángulo? ¿Se refiere filosóficamente, técnicamente, etc?

Philosophically, usted tiene que preguntarse, cuál es su razonamiento para importar esta biblioteca y usarla entre Android e iOS. Es para ahorrar tiempo de código, carga de mantenimiento. Si es así, yo diría que esta es una excelente manera de hacer eso. Es evidente que hay algunos obstáculos y el dolor para obtener este tipo de un conjunto de trabajo. Además, las características de IDE para C ++ no son tan impresionantes como para Java en Eclipse. Trato de ser justo y equilibrado en la presentación PDF en el directorio doc/ . Dé eso una vez más.

Desde un punto de vista técnico, creo que lo único que me preocupa es asegurarse de limpiar los objetos Asio correctamente cuando se detiene la Actividad. Si necesita hacer las cosas en segundo plano, utilice un servicio en su lugar:

http://developer.android.com/reference/android/app/Service.html

UPDATE: Parece que hay un problema con std :: atomic en Android, y como Boost.Asio lo está usando (por defecto), combinado con hilos, uno de vez en cuando se bloquea. Afortunadamente Boost.Asio hace que sea fácil cambiar de Std.Atomic a Boost.Atomic y esto se ha cuidado en el proyecto Boost-for-Android en este commit .

Para más información sobre el error, vea aquí


Estamos desarrollando un juego multijugador simple (aún no lanzado) para Android usando boost asio y hasta ahora no tuvimos ningún problema. Eso es para la pregunta # 2.

¿Qué tipo de problemas está viendo?

Si los problemas están relacionados con la compilación y vinculación, tal vez estas sugerencias resultarán útiles.

Añada el siguiente archivo de AndroidManifest.xml:

 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

Tenga esto en su archivo Application.mk:

 APP_STL := gnustl_static APP_CPPFLAGS += -frtti -fexceptions 

Y utilizar esto como una plantilla para su archivo 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: Cómo creamos impulso para Android. Esto es lo que tenemos en nuestro 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 

Tenga en cuenta que estamos utilizando nuestra propia bifurcación de Boost-for-Android, esto es sólo porque uno tiene un parche para la nueva versión de NDK r8d. También se puede ver desde la línea de comandos que estamos usando la versión 1.49 de boost, este es actualmente el más alto soportado por Boost-for-Android.

Si desea saber qué combinaciones de Boost y Android NDK son compatibles, consulte el proyecto Boost-for-Android. Contiene los directorios llamados patches / boost- < X > / ndk-android < Y > donde X corresponde a la versión de boost soportada e Y a la versión NDK soportada (plug desvergonzado: nuestros 2 centavos al proyecto :-)).

A continuación se presentan algunos más (muy útil) la información recibida de la comunidad impulso:

  1. ¿Hay alguna razón específica detrás de la misma (como no optimizada para los dispositivos integrados)? ¿O por cualquier otra razón?

Boost funciona perfectamente en Android. Como hay un NDK (kit de desarrollo nativo) con un gcc bastante decente (4.6 algo) sólo tiene que configurar boost construir para usar el derecho gcc. Aunque todo esto funciona, requiere un poco de retoque para obtener los ajustes correctos. Pero de nuevo, en principio, no hay mucha diferencia en la construcción de Boost para Android o cualquier otra distribución Linux.

  1. ¿Existen (en absoluto) problemas conocidos si usamos las bibliotecas boost para la creación de redes y la sincronización de subprocesos para el desarrollo de aplicaciones Smartphone? ¿Será una buena idea usar BOOST ASIO para el mismo?

Es perfectamente bien utilizar Boost.Thread o Boost.Asio. Funcionan perfectamente bien en dispositivos ARM. Incluso hay soporte para los hackers más específicos de la plataforma como boost.atomic y boost.context.

FYI son los enlaces encontrados https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Impulso de construcción con el Android NDK es aún más simple que con boost.build directamente. He compilado un montón de scripts de construcción de Android, que se pueden encontrar aquí: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Busque el impulso _ $ {module} para varias bibliotecas de impulso. Esta no es una lista completa. Sólo lo que necesitaba. Además, podría necesitar un poco de amor por 1.53. Todas las diferentes bibliotecas no necesitaban ningún tratamiento especial para Android (modulo algunos bugs menores donde el compilador no estaba de acuerdo con otras versiones gcc)

Espero que esto sea útil para otros también! ¡Gracias!

  • Procesamiento de fondo Delphi Firemonkey iOS
  • Phonegap / Cordova cámara plugin - cómo obtener la fecha de la foto / hora?
  • Uso de archivos SVGZ sin servidor. (IOS local / Android)
  • Obtener los bytes / stream de una imagen o ImageSource en Xamarin.Forms?
  • ParseInstallation.getCurrentInstallation (). SaveInBackground (); no funciona
  • ¿Cómo mostrar las pestañas (espacios en blanco) procedentes de la base de datos MySQL correctamente en ambos en Android y IOS aplicación?
  • Cordova audio visualizador? (Con Media en lugar de AnalyserNode)
  • Javascript máximo altura de la vista tras la orientación cambiar Android y iOS
  • React Native v Formularios Xamarin - Elegir el entorno de la aplicación multiplataforma
  • ¿Puedo usar CloudKit en Android o en una aplicación basada en Web?
  • SharedPreferences en iOS 4
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.