トップページ > 記事閲覧
Androidの通信について
名前:焼肉 日時: 2018/01/27 09:59

お世話になります。 Androidの通信について質問です。 現在、Post,Getといった通信プログラムの実装をAndroidで計画しています。 そこで、初心者である自分なりにC++の通信ライブラリであるcpprestsdkなどを使用してみたりJavaで出来ないかと調べてみたのですが、 cpprestsdkがVisualStudio2017に対応していないためコンパイルが通らず、Javaで通信をしようとしましたが資料がAndroidStudioの gradleファイルなどを前提としたもの(retrofit2など)でありうまくいかず、どうすればPostGet機能を実装できるのかが分かりません。 DXライブラリにおいてPOST,GETを使用する関数の実装、もしくはJavaを使用したPostGetのサンプルプログラムの記載などは今後あるでしょうか? 個人的に実装したいプログラムは以下のような基本的なものを想定しています。 ttp://kagasu.hatenablog.com/entry/2017/10/07/190551
メンテ

Page: 1 |

Re: Androidの通信について ( No.1 )
名前:管理人 日時:2018/01/27 23:35

> DXライブラリにおいてPOST,GETを使用する関数の実装、もしくはJavaを使用したPostGetのサンプルプログラムの記載などは今後あるでしょうか? すみません、今のところ予定はありません cpprestsdk ですが、手元の環境でコンパイルを通すことができましたので、よろしければ以下の手順をお試しください 1.VisualStudio2017 のメニューから『ファイル(F) -> 新規作成(N) -> プロジェクト(P)...』を選んで『新しいプロジェクト』ダイアログを表示 2.『新しいプロジェクト』ダイアログの左側にある『Visual Studio インストーラーを開く』をクリックしてインストーラーを起動 3.VisualStudio2017 は一旦ここで閉じる 4.インストーラーの更新が必要だと言われたら更新 5.VisualStudio2017 の更新があったら更新( 更新が終わった後、『変更』ボタンを押す ) 6.インストールする項目の一覧が表示されたら、上部のタブから『個別のコンポーネント』をクリック 7.コンポーネント一覧から『ARM 用 Visual Studio C++ コンパイラとライブラリ』と『ARM64 用 Visual Studio C++ コンパイラとライブラリ』の  二つにチェックが付いていなかったらチェックをつけて、右下の『変更』ボタンを押してこの二つのコンポーネントをインストール 8.インストールが完了したらインストーラーを閉じる 9.cpprestsdk-master.zip の中身の cpprestsdk-master フォルダを、なるべくドライブの浅いフォルダに解凍  ( というより、例えば『C:\Users\パソコン太郎\Documents\cpprestsdk-master』のような、途中に『パソコン太郎』などの全角の  文字が含まれるフォルダより深いところにあるとコンパイルが失敗します ) 10.cpprestsdk-master\cpprestsdk141.sln を VisualStudio2017 で開きます 11.VisualStudio2017 のソリューションエクスプローラーにある『Source -> cpprest141.android (android-19)』を右クリックして、  プルダウンメニューから『プロパティ(R)』をクリックしてプロジェクトのプロパティを開きます 12.プロパティダイアログの左上の『構成(C):』を『すべての構成』に変更 13.ダイアログの左側から『構成プロパティ -> 全般』を選択 14.ダイアログ右側の『ターゲット API レベル』を『Lollipop 5.0 - 5.0.2、(android-21)』に変更してから『OK』を押してダイアログを閉じます 15.次に cpprestsdk-master\Release\src\http\common\http_msg.cpp を開きます 16.http_msg.cpp の 275行目 辺りにある std::string http_version::to_utf8string() const { std::string ret; ret.reserve(8); ret.append("HTTP/"); std::string number = ret.append(std::to_string(static_cast<unsigned int>(major))); ret.append("."); ret.append(std::to_string(static_cast<unsigned int>(minor))); return ret; } を、以下のように書き換えてから保存します( std::to_string が Android 環境ではまだ使用できないようなので ) #ifdef __ANDROID__ template <typename T> std::string tostr(const T& t) { std::ostringstream os; os<<t; return os.str(); } #endif std::string http_version::to_utf8string() const { std::string ret; ret.reserve(8); ret.append("HTTP/"); std::string number = #ifdef __ANDROID__ ret.append(tostr(static_cast<unsigned int>(major))); #else ret.append(std::to_string(static_cast<unsigned int>(major))); #endif ret.append("."); #ifdef __ANDROID__ ret.append(tostr(static_cast<unsigned int>(minor))); #else ret.append(std::to_string(static_cast<unsigned int>(minor))); #endif return ret; } 17.VisualStudio2017 のソリューションエクスプローラーにある『Source -> cpprest141.android (android-21)』を右クリックして、  プルダウンメニューから『ビルド(U)』をクリックしてビルドします 18.ビルドが成功すると cpprestsdk-master\Binaries の中に cpprestsdk-master\Binaries\ARM\Debug\cpprest141d_android_2_10.a などの  ライブラリファイル( 拡張子が a のファイル )が作成されます よろしければお試しください m(_ _)m ( 因みに この cpprest141d_android_2_10.a などのファイルを使用するところまでは時間が掛かりそうなのでやっていません・・・ )
メンテ
Re: Androidの通信について ( No.2 )
名前:焼肉 日時:2018/01/28 11:19

管理人様ありがとうございます。 おかげでライブラリをコンパイルすることができました。 ただ、cpprestsdkの初期化関数であるcpprest_init関数をandroid_main関数の冒頭に呼び出した途端以下のエラーが発生してしまいました。 エラー (アクティブ) E0020 識別子 "cpprest_init" が定義されていません test.NativeActivity c:\Users\misov\Desktop\test\test\test.NativeActivity\main.cpp 220 おそらく、ヘッダファイル(pplx/threadpool.h)をincludeしていないことが原因だと思うのですが、追加のインクルードディレクトリでパスを設定しているにも関わらずなぜこのエラーが出るのかがわかりません。 includeファイルのパス設定までは以下のような流れで行いました。 1、プロジェクトの作成 ttp://testsitecreate.work/c_language_question/00.jpg 2、C++言語設定 ttp://testsitecreate.work/c_language_question/0.jpg 3、プラットフォームセットがClang3.8になっていることを確認 ttp://testsitecreate.work/c_language_question/1.jpg 4、コード生成設定で「C++の例外を有効にする」に「はい」 ttp://testsitecreate.work/c_language_question/2.jpg 5、追加のライブラリディレクトリで作成した静的ライブラリのパスを設定 ttp://testsitecreate.work/c_language_question/3.jpg 6、C,C++の全般から追加のインクルードディレクトリにインクルードファイルのパスを設定(C:\cpprestsdk-master\Release\include;) ttp://testsitecreate.work/c_language_question/4.jpg 7、エラー発生 ttp://testsitecreate.work/c_language_question/5.jpg パス(C:\cpprestsdk-master\Release\include\pplx\threadpool.h)への設定を間違ってしまったのでしょうか? エラーを解決するにはどうすれば良いでしょう?
メンテ
Re: Androidの通信について ( No.3 )
名前:焼肉(解決) 日時:2018/01/28 20:26

NugetでAndroid版のcpprestsdkをリンクした後 #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "AndroidProject1.NativeActivity", __VA_ARGS__)) #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "AndroidProject1.NativeActivity", __VA_ARGS__)) の文の真下に #include <cpprest/http_client.h> using namespace web; using namespace web::http; using namespace web::http::client; を挿入することで解決できました。 以降は自分で頑張ってみます。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存