この質問は AndroidでBoost AsioまたはAysnc Socketスレッドを選択する必要がありますか? に続きます。
Boostライブラリは広く有用であり、幅広いアプリケーションで使用できることを目的としていますが、AndroidおよびiOS
参考までに、サンプルAndroid applicationを作成するために次のリンクを使用していますが、まだ成功していません:(
https://github.com/MysticTreeGames/Boost-for-Android
http://www.codexperiments.com/Android/2011/05/tips-tricks-building-boost-with-ndk-r5/
Android NDK and STLport を指定してboostライブラリ(shared_ptrを含む)を使用する方法
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
前もって感謝します。
Boostコミュニティから返信がありますはい。これらのプラットフォームは、回帰テストを定期的に実行しようとするボランティアがいないため、公式にはサポートされていません。
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など、2つのプラットフォーム間で使用されるいくつかの他の一般的なアイテムも取り込むことがわかります。
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-s.a
LOCAL_EXPORT_C_INCLUDES := ./path/to/the/directory/that/has/the/boost/headers
include $(PREBUILT_STATIC_LIBRARY)
最後に、例のように、そのモジュールをインポートします
$(call import-module,[NAME OF NEW SUBMODULE])
他の質問に関しては、iOSおよびAndroidでBoostを使用するアプリケーションをご存知ですか?はい、私はそれを複数回成功させて、App Storeに機能するアプリをリリースしました。
他の質問として、ネットワーク通信にブーストを使用することをお勧めしますか?ここで何を意味するのか分かりません。どの角度から?哲学的に、技術的になど、どういう意味ですか?
哲学的には、このライブラリをインポートし、AndroidとiOSの間で使用する理由は何ですか。コード時間とメンテナンスの負担を節約するためですか。明らかに、この種のセットアップを機能させるにはいくつかのハードルと痛みがあります。また、C++のIDE機能は= Javaです。doc/
ディレクトリでのPDFプレゼンテーションで公平でバランスを取るようにしています。もう一度やり直してください。
技術的な観点からは、アクティビティが停止したときにAsioオブジェクトを適切にクリーンアップすることを確認することだけが心配だと思います。バックグラウンドで処理する必要がある場合は、代わりにサービスを使用します。
http://developer.Android.com/reference/Android/app/Service.html
UPDATE:Androidのstd :: atomicに問題があるようです。Boost.Asioが(デフォルトで)スレッドと組み合わせて使用しているため、時々デッドロックに陥りました。幸いなことにBoost.Asioを使用すると、Std.AtomicからBoost.Atomicに簡単に切り替えることができ、これは this commit の Boost-for-Android プロジェクトで処理されます。
バグの詳細については、 こちら をご覧ください
ブーストasioを使用してAndroidを使用したシンプルなマルチプレイヤーゲーム(まだリリースされていない)を開発していますが、これまでのところ問題はありませんでした。
どのような問題が発生していますか?
問題がコンパイルとリンクに関連している場合、これらのヒントが役立つ可能性があります。
AndroidManifest.xmlファイルに次を追加します。
<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>
これを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)
編集: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のパッチがあるためです。 Boostの1.49バージョンを使用していることもコマンドラインから確認できます。これは現在、Boost-for-Androidでサポートされている最高のものです。
BoostとAndroid NDKのどの組み合わせがサポートされているかを知りたい場合は、Boost-for-Androidプロジェクトをご覧ください。patch/ boost-<[〜#〜] x [〜#〜]>/ndk-Android <[〜#〜] y [〜#〜 ]>ここで、[〜#〜] x [〜#〜]はサポートされているブーストバージョンに対応し、[〜#〜] y [〜#〜]サポートされているNDKバージョン(恥知らずのプラグイン:プロジェクトへの2セント:-))。
以下に、ブーストコミュニティから受信した(非常に有用な)情報をいくつか示します。
- 同じ理由(組み込みデバイス用に最適化されていないなど)の背後に特定の理由はありますか?または他の理由は?
BoostはAndroidで完全に機能します。かなりまともなgcc(4.6の何か)を備えたNDK(ネイティブ開発キット)があるので、適切なgccを使用するようにブーストビルドを構成する必要があります。これはすべて機能しますが、設定を正しく行うには少し手を加える必要があります。ただし、原則として、Androidまたは他のLinuxディストリビューションの場合、Boostのビルドに大きな違いはありません。
- スマートフォンアプリケーション開発のためにネットワーキングとスレッド同期にブーストライブラリを使用する場合、既知の問題は(まったく)ありますか? BOOST ASIOを同じものに使用することをお勧めしますか?
Boost.ThreadまたはBoost.Asioを使用してもまったく問題ありません。 ARMデバイスで完全に動作します。boost.atomicやboost.contextなどのプラットフォーム固有のハッカーに対するサポートもあります。
参考までに見つかったリンク https://github.com/MysticTreeGames/Boost-for-Androidhttp://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 さまざまなブーストライブラリのboost _ $ {module}を探します。これは完全なリストではなく、必要なものだけです。また、1.53への愛情も必要になるかもしれません。すべての異なるライブラリは、特別なAndroid処理を必要としませんでした。
これが他の人にも役立つことを願っています!ありがとう!