51

この質問は、AndroidでBoostAsioまたはAysncSocketスレッドを選択する必要がありますか?の続きです。尋ねた、

Boostライブラリは、広く有用であり、幅広いアプリケーションで使用できることを目的としていますが、AndroidとiOSで利用できる公式のサポートはありません。

  1. 組み込みデバイス用に最適化されていないなど、同じ背後にある特定の理由はありますか?または他の理由はありますか?
  2. AndroidまたはiOSでBoostを使用して構築されたアプリケーションを知っている人はいますか?
  3. 通信用に複数のスレッドを生成するネットワーク集約型アプリケーションにBoostライブラリを使用することをお勧めしますか?

参考までに、次のリンクを使用してサンプルのAndroidアプリケーションを作成していますが、まだ成功していません:(

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

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

アンドロイドにBoostC++ライブラリを含める

Android NDKおよび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

AndroidNDKR5とC++例外のサポート

前もって感謝します。

4

4 に答える 4

24

ブーストコミュニティから返信がありましたはい。これらのプラットフォームは、回帰テストを定期的に実行することを志願した人がいないため、公式にはサポートされていません。

Boost開発者がすべてのプラットフォームでテストすることは不可能です。したがって、開発者は、ボランティアによって実行された回帰テストのテスト結果に依存します。たとえば、 http://beta.boost.org/development/tests/trunk/developer/summary.htmlを参照してください。

特定のプラットフォームのテストを実行するボランティアがいない場合、そのプラットフォームは正式にサポートされていません。

したがって、AndroidまたはiOSが正式にサポートされることに関心がある場合は、Boostの定期的な(できれば毎日の)回帰テストの実行を開始してください。http://beta.boost.org/development/running_regression_tests.htmlを参照してください

于 2012-12-27T12:17:30.797 に答える
17

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を使用するアプリケーションを知っていますか?はい、私はそれを何度も成功させ、動作するアプリをAppStoreにリリースしました。

他の質問ですが、ネットワーク通信にブーストを使用することをお勧めしますか?ここで何を意味するのかわかりません。どの角度から?哲学的、技術的などの意味ですか?

哲学的には、このライブラリをインポートしてAndroidとiOSの間で使用する理由は何であるかを自問する必要があります。コード時間やメンテナンスの負担を節約するためですか。もしそうなら、これはそれを行うための優れた方法だと思います。明らかに、この種のセットアップを機能させるには、いくつかのハードルと苦痛があります。また、C ++のIDE機能は、EclipseのJavaほど優れていません。doc/私は、ディレクトリ内のPDFプレゼンテーションで公平かつバランスの取れたものになるように努めています。もう一度やり直してください。

技術的な観点から、私が心配するのは、アクティビティが停止したときにAsioオブジェクトを適切にクリーンアップすることだけだと思います。バックグラウンドで処理を行う必要がある場合は、代わりにサービスを使用してください。

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

于 2013-01-01T18:09:15.293 に答える
12

更新: Androidのstd :: atomicに問題があるようです。また、Boost.Asioが(デフォルトで)スレッドと組み合わせて使用​​しているため、デッドロックが発生することがあります。幸い、Boost.Asioを使用すると、Std.AtomicからBoost.Atomicに簡単に切り替えることができます。これは、このコミットのBoost-for-Androidプロジェクトで処理されています。

バグの詳細については、こちらをご覧ください


Boost asioを使用したAndroid向けのシンプルなマルチプレイヤーゲーム(まだリリースされていません)を開発しており、これまでのところ問題はありませんでした。質問2です。

どんな問題がありますか?

問題がコンパイルとリンクに関連している場合は、おそらくこれらのヒントが役立つでしょう。

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のパッチがあるためです。また、コマンドラインから1.49バージョンのboostを使用していることがわかります。これは、現在、Boost-for-Androidでサポートされている最高のバージョンです。

BoostとAndroidNDKのどの組み合わせがサポートされているかを知りたい場合は、Boost-for-Androidプロジェクトの内部をご覧ください。これには、patches / boost- < X > / ndk-android < Y >というディレクトリが含まれています。ここで、Xはサポートされているブーストバージョンに対応し、YはサポートされているNDKバージョンに対応します(恥知らずなプラグ:プロジェクトへの2セント:-))。

于 2012-12-30T10:31:45.147 に答える
11

以下は、ブーストコミュニティから受け取ったその他の(非常に役立つ)情報です。

  1. 同じ背後にある特定の理由がありますか(組み込みデバイス用に最適化されていないなど)?または他の理由はありますか?

BoostはAndroidで完全に機能します。かなりまともなgcc(4.6程度)を備えたNDK(ネイティブ開発キット)があるので、適切なgccを使用するようにブーストビルドを構成する必要があります。これはすべて機能しますが、設定を正しく行うには少し調整が必要です。ただし、原則として、BoostforAndroidまたはその他のLinuxディストリビューションの構築に大きな違いはありません。

  1. スマートフォンアプリケーション開発のネットワーキングとスレッド同期にBoostライブラリを使用する場合、(まったく)既知の問題はありますか?同じようにBOOSTASIOを使用するのは良い考えですか?

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ライブラリのboost _${module}を探します。これは完全なリストではありません。必要なものだけ。また、1.53への愛が必要かもしれません。すべての異なるライブラリは、特別なandroid処理を必要としませんでした(コンパイラが他のgccバージョンと一致しなかったいくつかのマイナーなバグを法として)

これが他の人にも役立つことを願っています!ありがとう!

于 2013-01-03T12:17:01.493 に答える