Официальная поддержка «Boost library» для Android и iOS?

Этот вопрос в продолжении. Должен ли я выбирать streamи Boost Asio или Aysnc Socket в Android? спросил,

Библиотеки Boost предназначены для широкого использования и использования в широком спектре приложений, но пока нет официальной поддержки для Android и iOS

  1. Есть ли какая-то конкретная причина по сравнению с тем, что не оптимизировано для встроенных устройств? Или любая другая причина?
  2. Знает ли какой-либо орган какое-либо приложение, созданное с помощью Boost на Android или iOS?
  3. Целесообразно ли использовать библиотеки boost для интенсивного приложения в сети, который генерирует многопоточные streamи для компромиссов?

FYI .. Я использовал следующие ссылки для создания примера приложения для Android, но пока не удалось 🙁

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

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

Включить библиотеку Boost C ++ в android

Как использовать библиотеку boost (включая shared_ptr) с Android NDK и 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 и поддержка исключения C ++

Заранее спасибо.

Получил ответ от сообщества поддержки Да. Эти платформы официально не поддерживаются, потому что никто не вызвался регулярно проводить регрессионные тесты для них.

Разработчик Boost не может тестироваться на всех платформах. Поэтому разработчики зависят от результатов тестирования регрессионных тестов, проводимых добровольцами. Например, см. http://beta.boost.org/development/tests/trunk/developer/summary.html

Если никто не добровольно запускает тесты для конкретной платформы, эта платформа официально не поддерживается.

Поэтому, если вам нравится официально поддерживать Android или iOS, начните регулярные (предпочтительно ежедневные) регрессионные тесты для Boost. См. http://beta.boost.org/development/running_regression_tests.html

Посмотрите мой кросс-платформенный учебник по github. Он показывает, как настроить Boost и использовать его между iOS и Android. У меня было такое ужасное время с этим, я полагаю, что я буду документировать его, чтобы никто больше не мог это понять. Вы заметите, что этот проект также использует несколько других общих элементов, используемых между двумя платформами, например CoreFoundation и SQLite.

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

Примечание. В моем учебнике не показано, как создавать скомпилированные библиотеки для повышения. Я сделал это с успехом, используя предоставленные вами инструкции:

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

После того, как у вас есть статическая библиотека, собранная с помощью инструментальной привязки Android, вы можете легко связать ее с помощью модуля, аналогичного тому, который находится в каталоге include/[NAME OF NEW SUBMODULE] проекта выше. Для файла Android.mk в корне этого каталога используйте что-то похожее на следующее.

 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) 

Наконец, импортируйте этот модуль, как в примере, внутри

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

По всем другим вопросам – знаете ли вы о приложении, использующем Boost на iOS и Android? Да, я сделал это несколько раз с успехом и выпустил рабочие приложения в App Store.

Ваш другой вопрос, целесообразно ли использовать boost для сетевой связи? Я не уверен, что вы имеете в виду здесь. С какого угла? Вы имеете в виду, философски, технически и т. Д.?

Философски, вы должны спросить себя, каковы ваши аргументы в пользу импорта этой библиотеки и использования ее между Android и iOS. Это экономить время кода, нагрузка на обслуживание. Если это так, я бы сказал, что это отличный способ сделать это. Ясно, что есть некоторые препятствия и боль, чтобы получить такую ​​работу. Кроме того, функции IDE для C ++ не так велики, как для Java в Eclipse. Я стараюсь быть справедливым и сбалансированным в презентации PDF в каталоге doc/ . Дайте это один раз.

С технической точки зрения, я думаю, что единственное, что меня беспокоит, – это убедиться, что я правильно очищаю объекты Asio, когда активность остановлена. Если вам нужно сделать что-то в фоновом режиме, используйте Службу, а не:

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

ОБНОВЛЕНИЕ: Кажется, что проблема связана с std :: atomic на Android, и поскольку Boost.Asio использует ее (по умолчанию), в сочетании с streamами, один из них иногда зашел в тупик. К счастью, Boost.Asio позволяет легко переключаться с Std.Atomic на Boost.Atomic, и об этом позаботились в проекте Boost-for-Android в этой команде .

Для получения дополнительной информации об ошибке см. Здесь


Мы разрабатываем простую многопользовательскую игру (еще не выпущенную) для Android с использованием boost asio, и до сих пор у нас не было никаких проблем. Это вопрос №2.

Какие проблемы вы видите?

Если проблемы связаны с компиляцией и связыванием, возможно, эти подсказки окажутся полезными.

Добавьте в свой файл AndroidManifest.xml следующее:

  

Имейте это в своем файле Application.mk:

 APP_STL := gnustl_static APP_CPPFLAGS += -frtti -fexceptions 

И используйте это как шаблон для вашего файла 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: Как мы наращиваем поддержку Android. Это то, что мы имеем в нашем 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 

Обратите внимание, что мы используем нашу собственную вилку Boost-for-Android, это только потому, что у нее есть патч для новейшей версии NDK r8d. Из командной строки также видно, что мы используем версию повышения 1.49, это в настоящее время самое высокое, поддерживаемое Boost-for-Android.

Если вы хотите узнать, какие комбинации Boost и Android NDK поддерживаются, посмотрите проект Boost-for-Android. Он содержит каталоги, называемые патчами / boost- < X > / ndk-android < Y >, где X соответствует поддерживаемой версии boost и Y для поддерживаемой версии NDK (бесстыдный плагин: наши 2 цента для проекта :-)).

Ниже приведена еще одна (очень полезная) информация, полученная от сообщества разработчиков:

  1. Есть ли какая-то конкретная причина для этого (например, не оптимизирована для встроенных устройств)? Или любая другая причина?

Boost отлично работает на Android. Поскольку существует NDK (собственный набор для разработки) с довольно приличным gcc (4.6), вам просто нужно настроить boost build для использования правильного gcc. Хотя это все работает, для этого нужно немного поработать, чтобы правильно настроить настройки. Но опять же, в принципе, нет большой разницы в создании Boost для Android или любого другого дистрибутива Linux.

  1. Существуют (вообще) какие-либо известные проблемы, если мы используем библиотеки boost для организации сетей и синхронизации streamов для разработки приложений для смартфонов? Будет ли неплохо использовать BOOST ASIO для того же?

Прекрасно использовать Boost.Thread или Boost.Asio. Они отлично работают на устройствах ARM. Существует даже поддержка более специфичных для платформы хакеров, таких как boost.atomic и boost.context.

FYI – это ссылки, найденные https://github.com/MysticTreeGames/Boost-for-Android http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/

Повышение уровня с Android NDK еще проще, чем с boost.build напрямую. Я собрал кучу скриптов для сборки Android, которые можно найти здесь: https://github.com/STEllAR-GROUP/HPXAndroid/tree/master/modules Ищите ускорение _ $ {module} для различных библиотек boost. Это не полный список. Только то, что мне нужно. Кроме того, может понадобиться любовь к 1.53. Все разные библиотеки не нуждались в специальной обработке для Android (по сравнению с некоторыми незначительными ошибками, когда компилятор не соглашался с другими версиями gcc)

Надеюсь, это будет полезно и для других! Благодаря!

  • Android NDK C ++ JNI (нет реализации для родных ...)
  • Заполненная активность ADT, созданная с использованием fragmentов.
  • Можно ли объявить переменную в Gradle, используемой в Java?
  • Выполнить код, когда приложение Android закрыто / отправлено на задний план
  • Как обрабатывать изменение ориентации экрана, когда диалог выполнения и фоновый stream активны?
  • Как убить все запущенные приложения в Android?
  • Android: как включить / отключить Wi-Fi или подключение к Интернету
  • Значок панели уведомлений становится белым в Android 5 Lollipop
  • Источник экрана блокировки Android
  • андроидный fragment. Как сохранить состояния представлений в fragmentе, когда другой fragment нажат поверх него
  • Как раз для всех, как правильно сохранить состояние экземпляра fragmentов в стеке?
  • Давайте будем гением компьютера.