2012-12-26 2 views
43

Cette question est dans le prolongement de Should I choose Boost Asio or Aysnc Socket threads in Android? demandé,Official "Bibliothèque Boost" Support pour Android et iOS?

bibliothèques Boost sont destinées à être largement utile et utilisable dans un large éventail d'applications, mais encore il n'y a pas de support officiel disponible pour Android et iOS

  1. Y a-t-il une raison spécifique expliquant la même chose? Non optimisé pour les dispositifs intégrés ? Ou toute autre raison?
  2. Est-ce que quelqu'un sait de n'importe quelle application construite en utilisant Boost sur Android ou iOS?
  3. Est-il conseillé d'utiliser des bibliothèques boost pour une application réseau intense qui génère des threads multiples pour la communication?

FYI..I ont utilisé des liens suivants pour créer un exemple d'application Android, mais pas encore réussi :(

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

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

Include Boost C++ library in android

How to use the boost library (including shared_ptr) with the Android NDK and 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 and support of C++ exception

Merci à l'avance.

+0

Techniquement, vous voulez un support officiel pour ces plates-formes au lieu de _ports_. –

+0

est boost conseillé pour le développement d'applications smartphone du tout? – RDX

+3

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. –

Répondre

23

Réponse de la communauté boost Oui. Ces plates-formes ne sont pas officiellement supportées, car personne ne s'est porté volontaire pour effectuer régulièrement des tests de régression à leur place.

Il n'est pas possible pour un développeur Boost de tester sur toutes les plates-formes. Donc développeurs dépendent des résultats des tests de régression effectués par volontaires. Par exemple, voir http://beta.boost.org/development/tests/trunk/developer/summary.html

Si aucun volontaire pour exécuter les tests pour une plate-forme particulière, que plate-forme ne soit pas officiellement pris en charge. Par conséquent, si vous vous souciez de la prise en charge officielle d'Android ou d'iOS, commence à exécuter des tests de régression réguliers (de préférence quotidiens) pour Boost. Voir http://beta.boost.org/development/running_regression_tests.html

+3

Je serais heureux d'utiliser un peu de matériel de mon travail en effectuant des tests de régression tous les soirs. Le problème est que la compilation est multi plate-forme, a des exigences spécifiques pour faire des applications (vous ne pouvez pas faire une application console sur ces plates-formes), et les tests doivent être exécutés sur un périphérique externe/simulateur/émulateur. La suite de tests existante n'est tout simplement pas équipée pour cela, autant que je sache. Je serais, cependant, disposé à travailler avec quelqu'un, plus familier avec des essais de poussée que moi, vers cette entreprise. Mon nom (à) brainiumstudios.com – Brent

+3

CrystaX https://www.crystax.net/ projet a lancé des tests de régression régulière pour Android depuis mars 2015 http://www.boost.org/development/tests/master/developer /summary.html http://habrahabr.ru/post/253233/ (rus) –

11

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 :-)).

+0

quelles bibliothèques de boost seraient nécessaires pour le réseautage et le support multithread? – RDX

+0

Ajoutez ces trois bibliothèques: -lboost_system-gcc-mt- , -lboost_thread-gcc-mt- et -lgnustl_static (dans cet ordre). Ça devrait le faire. Laissez-nous voir l'erreur exacte que vous voyez, il est difficile de deviner comment aider sans cela.Des informations supplémentaires qui nous seraient utiles: la version NDK, la plateforme sur laquelle vous développez et si vous utilisez des makefiles eclipse ou ant +. –

+0

Merci peter. Résolu les problèmes après avoir analysé votre réponse. Une question. Comment avez-vous respecté boost sur Android? Et en utilisant boost 1_52 – RDX

14

Consultez mon didacticiel multi-plateforme sur github. Il vous montre comment configurer Boost et l'utiliser entre iOS et Android. J'ai passé un moment si horrible avec ça, je me dis que je le documenterais pour que personne d'autre ne le comprenne. Vous remarquerez que ce projet intègre également plusieurs autres éléments communs utilisés entre les deux plates-formes, par exemple CoreFoundation et SQLite.

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

Note: Mon tutoriel ne montre pas comment construire les bibliothèques compilées pour stimuler. Je l'ai fait avant avec succès en suivant les instructions que vous avez fournies:

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

Une fois que vous avez une bibliothèque statique compilé par la chaîne d'outils Android, vous pouvez facilement relier via un module similaire à ceux dans le répertoire include/[NAME OF NEW SUBMODULE] du projet ci-dessus. Utilisez quelque chose de semblable à ce qui suit pour le fichier Android.mk dans la racine de ce répertoire.

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

Enfin, importer ce module, comme dans l'exemple, à l'intérieur

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

En ce qui concerne vos questions --do vous connaissez une application qui utilise Boost sur iOS et Android? Oui, je l'ai fait plusieurs fois avec succès et a publié des applications de travail dans les App Stores.

Votre autre question, est-il conseillé d'utiliser boost pour la communication réseau? Je ne suis pas sûr de ce que tu veux dire ici. De quel angle? Voulez-vous dire, philosophiquement, techniquement, etc? Philosophiquement, vous devez vous demander quel est votre raisonnement pour importer cette bibliothèque et l'utiliser entre Android et iOS. Est-ce pour économiser du temps de code, de la charge de maintenance. Si c'est le cas, je dirais que c'est un excellent moyen de le faire. De toute évidence, il y a des obstacles et de la douleur pour que ce genre d'installation fonctionne. De plus, les fonctionnalités IDE pour C++ ne sont pas aussi géniales que pour Java dans Eclipse. J'essaie d'être juste et équilibré dans la présentation PDF dans le répertoire doc/. Donne ça une fois de plus. D'un point de vue technique, je pense que la seule chose qui m'inquiète est de m'assurer que je nettoie correctement les objets Asio lorsque l'activité est arrêtée. Si vous avez besoin de faire des choses en arrière-plan, utilisez un service à la place:

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

+0

Thanks markshiz – RDX

9

Voici quelques-uns plus (très utile) les informations reçues de la communauté boost:

  1. est-il une raison spécifique derrière le même (comme non optimisé pour appareils intégrés)? Ou toute autre raison?

Boost fonctionne parfaitement sur Android. Comme il ya un NDK (kit de développement natif) avec un gcc assez décent (4.6 quelque chose), vous avez juste besoin de configurer boost build pour utiliser le bon gcc. Bien que tout cela fonctionne, il faut un peu de bricolage pour obtenir les bons paramètres. Mais encore une fois, en principe, il n'y a pas de beaucoup de différence dans la construction de Boost pour Android ou toute autre distribution linux .

  1. Y at-il (du tout) des problèmes connus si nous utilisons des bibliothèques pour stimuler en réseau et la synchronisation des threads pour l'application Smartphone développement ? Serait-ce une bonne idée d'utiliser BOOST ASIO pour le même?

Il est parfaitement bien utiliser Boost.Thread ou Boost.Asio. Ils fonctionnent parfaitement bien sur les appareils ARM. Il y a même un support pour les hackeries plus spécifiques à la plateforme comme boost.atomic et boost.context.

Pour votre information sont les liens trouvés https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

boost de construction avec l'Android NDK est encore plus simple qu'avec boost.build directement. J'ai compilé un tas de scripts de construction Android, qui peuvent être trouvés ici: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Recherchez le boost _ $ {module} pour diverses bibliothèques de boost. Cette liste complète n'est pas . Seulement ce dont j'avais besoin. Aussi, pourrait avoir besoin d'amour pour 1,53. Toutes les différentes bibliothèques ne ont pas besoin de traitement spécial Android (modulo quelques bugs mineurs où le compilateur ne sont pas d'accord avec les autres versions de gcc)

J'espère que ce serait utile pour les autres aussi! Merci!

+0

Le support officiel a besoin d'un testeur volontaire, afin que les responsables puissent corriger les problèmes . Si vous en avez les moyens, veuillez effectuer régulièrement le test de régression. – RDX

Questions connexes