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;
を挿入することで解決できました。
以降は自分で頑張ってみます。
ありがとうございました。
|