トップページ > 記事閲覧
VisualStudioからAndroidStudioの移植のやり方
名前:焼肉 日時: 2020/11/29 17:57

お世話になっております。 前回BaaSについて質問させて頂きありがとうございました。(前回→tps://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5072) 今回は前回のソースをAndroidStudioに移行しようとしているのですが、AndroidStudioをVisualStudioと同じようにコンパイルしてヘッダやソースのプロジェクトへの関連付けがうまくいかず質問させて頂きました。 前回やったこと。 1,↓のソースをダウンロードしてC直下に解凍。 tps://github.com/gamesparks/gamesparks-cpp-base 構成→すべての構成 プラットフォーム→すべてのプラットフォーム 追加のインクルードディレクトリに以下を追加しました。 C:\gamesparks-cpp-base-master\base\include; VisualStudioの構成はこのようになっています。(GameSparksAll.cppはincludeしたヘッダの実体が入っています。(場所はC:\gamesparks-cpp-base-master\base\src)) tps://imgur.com/a/LKZCvwY このソースをAndroidStudioに移植しようとしたのですが、失敗してしまいました。 cmake.txtのDXライブラリに include_directories( C:/gamesparks-cpp-base-master/base/include/${ANDROID_ABI} ) のインクルードディレクトリを追加したのですが、 native-lib.cppに #include <GameSparks/GS.h> と書いても上記のヘッダファイルが見つかりませんと表示されてしまいます。 また、GameSparksAll.cppもどこに入れれば良いのか分かりません。 プロジェクトを添付しますので、アドバイスを頂ければ幸いです。 ・C直下に解凍するもの(公式のSDKをAndroidでもコンパイル出来るようにしたもの) tps://yaki-3d.work/GameSparks/gamesparks-cpp-base-master.zip ・前回成功したVisualStudioのプロジェクト tps://yaki-3d.work/GameSparks/GameSparksTestVS2.zip ・現在AndroidStudioに移行しようと試行錯誤していて失敗しているもの tps://yaki-3d.work/GameSparks/GameSparksTest.zip
メンテ

Page: 1 | 2 |

Re: VisualStudioからAndroidStudioの移植のやり方 ( No.5 )
名前:焼肉 日時:2020/11/30 20:43

すいません。色々試しましたが以下のようなエラーが出てコンパイルが通りません。 C:\gamesparks-cpp-base-master_2\base\src\easywsclient\AndroidImplSockets.cpp:173:27: error: no member named 'CertificateStore' in namespace 'GameSparks::Util' res = GameSparks::Util::CertificateStore::setup(conf); の行でGameSparks::UtilにはCertificateStoreがないですとコンパイラに言われてしまいます。 実体はCertificateStore.hppに定義してあるはずなのですが、なぜかAndroidImplSockets.cppからインクルードしているのに参照できずコンパイルが通らない状況です。 ・C:\Users\Publicに解凍するファイル tps://yaki-3d.work/GameSparks/GameSparksTest_2.zip ・C直下に解凍するファイル tps://yaki-3d.work/GameSparks/gamesparks-cpp-base-master_2.zip どなたかアドバイスをお願いします。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.6 )
名前:管理人 日時:2020/12/01 00:57

> 実体はCertificateStore.hppに定義してあるはずなのですが、なぜかAndroidImplSockets.cppからインクルードしているのに参照できずコンパイルが通らない状況です。 インクルードはされていますが、CertificateStore.hpp の 31行目にある #elif (GS_TARGET_PLATFORM == GS_PLATFORM_PS4) ↑こちらの下にCertificateStoreの定義が書かれているので、 プラットフォームがPS4ではない為、定義している箇所が無効化されているようです こちらの付近は特に変更はされていないでしょうか?
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.7 )
名前:焼肉 日時:2020/12/01 05:18

管理人様ありがとうございます。 早速修正させて頂きました。 しかし、 CertificateStore.hpp の中身を以下のソースに変えたのですが、エラーが出てしまいました。 static int numCerts; static unsigned char *pCertsEncoded; static int *pCertsLength; がGameSparks::Util::CertificateStoreに記載されているのに定義されていないとclangが吐き出してしまいます。 ソースは [source][/source] エラーは [error][/error] で囲ってあります。 [source] #ifndef GAMESPAKS_CERTIFICATE_STORE_HPP #define GAMESPAKS_CERTIFICATE_STORE_HPP #include "GameSparks/GSPlatformDeduction.h" #include <mbedtls/entropy.h> #include <mbedtls/ctr_drbg.h> #include <mbedtls/net.h> #include <mbedtls/error.h> #include <mbedtls/platform.h> #include <mbedtls/debug.h> #if !defined(IW_SDK) # include <mutex> #endif namespace GameSparks { namespace Util { class CertificateStore { public: static int numCerts; static unsigned char *pCertsEncoded; static int *pCertsLength; /// an implementation is expected to call mbedtls_ssl_conf_ca_chain() with CA certs and CRLs /// retrieved from the OS. After that it is expected to call mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); /// if the implementation does not do that, the SSL/TLS certificate from the server are not validated. /// currently this is only implemented on Windows. static int setup(mbedtls_ssl_config& conf) { (void)conf; int totalLength = 0; static bool initialized = false; static char errormsg[256]; static mbedtls_x509_crt cacert; static mbedtls_x509_crl crl; static gsstl::mutex mutex; gsstl::lock_guard<gsstl::mutex> guard(mutex); if (!initialized) { if (pCertsEncoded && pCertsLength) { mbedtls_x509_crt_init(&cacert); mbedtls_x509_crl_init(&crl); for (int i = 0; i < numCerts; ++i) { int length = pCertsLength[i]; if (length > 0) { int res = mbedtls_x509_crt_parse(&cacert, &(pCertsEncoded[totalLength]), (size_t)length); if (res != 0) { mbedtls_strerror(res, errormsg, sizeof(errormsg)); mbedtls_fprintf(stderr, "%s\n", errormsg); } } totalLength += length; } numCerts = 0; free(pCertsEncoded); pCertsEncoded = NULL; free(pCertsLength); pCertsLength = NULL; initialized = true; } } mbedtls_ssl_conf_ca_chain(&conf, &cacert, &crl); mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); return 0; } }; }} /* GameSparks::Util */ #endif /* GAMESPAKS_CERTIFICATE_STORE_HPP */ [/source] [error] Build command failed. Error while executing process C:\Android\android-sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C C:\Users\Public\GameSparksTest\app\.cxx\cmake\debug\arm64-v8a native-lib} ninja: Entering directory `C:\Users\Public\GameSparksTest\app\.cxx\cmake\debug\arm64-v8a' [1/3] Building CXX object CMakeFiles/native-lib.dir/native-lib.cpp.o [2/3] Building CXX object CMakeFiles/native-lib.dir/C_/gamesparks-cpp-base-master_2/base/src/GameSparksAll.cpp.o In file included from C:/gamesparks-cpp-base-master_2/base/src/GameSparksAll.cpp:191: C:/gamesparks-cpp-base-master_2/base/src/GameSparks/gsstl.cpp:608:82: warning: 'ptr_fun<int, int>' is deprecated [-Wdeprecated-declarations] s.erase(s.begin(), gsstl::find_if(s.begin(), s.end(), gsstl::not1(gsstl::ptr_fun<int, int>(isspace)))); ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\functional:1107:1: note: 'ptr_fun<int, int>' has been explicitly marked deprecated here _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\__config:941:39: note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX11' # define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\__config:930:48: note: expanded from macro '_LIBCPP_DEPRECATED' # define _LIBCPP_DEPRECATED __attribute__ ((deprecated)) ^ In file included from C:/gamesparks-cpp-base-master_2/base/src/GameSparksAll.cpp:191: C:/gamesparks-cpp-base-master_2/base/src/GameSparks/gsstl.cpp:619:73: warning: 'ptr_fun<int, int>' is deprecated [-Wdeprecated-declarations] s.erase(gsstl::find_if(s.rbegin(), s.rend(), gsstl::not1(gsstl::ptr_fun<int, int>(isspace))).base(), s.end()); ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\functional:1107:1: note: 'ptr_fun<int, int>' has been explicitly marked deprecated here _LIBCPP_DEPRECATED_IN_CXX11 inline _LIBCPP_INLINE_VISIBILITY ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\__config:941:39: note: expanded from macro '_LIBCPP_DEPRECATED_IN_CXX11' # define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED ^ C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1\__config:930:48: note: expanded from macro '_LIBCPP_DEPRECATED' # define _LIBCPP_DEPRECATED __attribute__ ((deprecated)) ^ 2 warnings generated. [3/3] Linking CXX shared library C:\Users\Public\GameSparksTest\app\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so FAILED: C:/Users/Public/GameSparksTest/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so cmd.exe /C "cd . && C:\Android\android-sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --gcc-toolchain=C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Android/android-sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib.so -o C:\Users\Public\GameSparksTest\app\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o CMakeFiles/native-lib.dir/C_/gamesparks-cpp-base-master_2/base/src/GameSparksAll.cpp.o -LC:/DxLib_Android/&#65533;v&#65533;&#65533;&#65533;W&#65533;F&#65533;N&#65533;g&#65533;&#594;&#457;&#65533;&#65533;&#65533;&#65533;&#1474;&#65533;&#65533;t&#65533;@&#65533;C&#65533;&#65533;_Android&#65533;p/arm64-v8a -llog -landroid -lGLESv1_CM -lEGL -lGLESv2 -lOpenSLES -lm -lDxLib -lDxUseCLib -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbullet -lopus -latomic -lm && cd ." CMakeFiles/native-lib.dir/C_/gamesparks-cpp-base-master_2/base/src/GameSparksAll.cpp.o: In function `GameSparks::Util::CertificateStore::setup(mbedtls_ssl_config&)': C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:51: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:51: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:51: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:51: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:55: undefined reference to `GameSparks::Util::CertificateStore::numCerts' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:55: undefined reference to `GameSparks::Util::CertificateStore::numCerts' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:57: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:57: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:61: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:61: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:73: undefined reference to `GameSparks::Util::CertificateStore::numCerts' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:73: undefined reference to `GameSparks::Util::CertificateStore::numCerts' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:75: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:75: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:76: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:76: undefined reference to `GameSparks::Util::CertificateStore::pCertsEncoded' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:78: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:78: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:79: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' C:/gamesparks-cpp-base-master_2/base/src/GameSparksRT/Connection/../../System/Net/Sockets/../../../../include/easywsclient/CertificateStore.hpp:79: undefined reference to `GameSparks::Util::CertificateStore::pCertsLength' clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. [/error] どなたかアドバイスをお願いします。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.8 )
名前:焼肉 日時:2020/12/01 07:01

undefined reference to〜 は『〜が定義されていないのに参照されています』 ということだったんですね。 もう一度確認し直します。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.10 )
名前:焼肉 日時:2020/12/02 04:46

コンパイルが通りました。 [code][/code]で区切っています。 [code] #ifndef GAMESPAKS_CERTIFICATE_STORE_HPP #define GAMESPAKS_CERTIFICATE_STORE_HPP #include "GameSparks/GSPlatformDeduction.h" #if defined(WIN32) # include <Windows.h> # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) # include <Wincrypt.h> # pragma comment(lib, "Crypt32.lib") # endif #elif (GS_TARGET_PLATFORM == GS_PLATFORM_PS4) extern "C" { extern int orbis_check_certificates(mbedtls_ssl_config& conf); } #elif (GS_TARGET_PLATFORM == GS_PLATFORM_ANDROID) #include <mbedtls/entropy.h> #include <mbedtls/ctr_drbg.h> #include <mbedtls/net.h> #include <mbedtls/error.h> #include <mbedtls/platform.h> #include <mbedtls/debug.h> #if defined(__UNREAL__) //#include "../../../Core/Public/Android/AndroidApplication.h" #include "Android/AndroidJNI.h" #include "Android/AndroidApplication.h" #include <android/log.h> #define LOG_TAG "main" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) #endif #endif #if !defined(IW_SDK) # include <mutex> #endif namespace GameSparks { namespace Util { class CertificateStore { public: /// an implementation is expected to call mbedtls_ssl_conf_ca_chain() with CA certs and CRLs /// retrieved from the OS. After that it is expected to call mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); /// if the implementation does not do that, the SSL/TLS certificate from the server are not validated. /// currently this is only implemented on Windows. static int setup(mbedtls_ssl_config& conf) { (void)conf; #if defined(WIN32) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) // Wincrypt appears to be not implemented for non-desktop apps static bool initialized = false; static char errormsg[256]; static mbedtls_x509_crt cacert; static mbedtls_x509_crl crl; static gsstl::mutex mutex; gsstl::lock_guard<gsstl::mutex> guard(mutex); if (!initialized) { mbedtls_x509_crt_init(&cacert); mbedtls_x509_crl_init(&crl); static const char* store_names[] = { "ROOT", "CA" }; for (int i = 0; i != sizeof(store_names) / sizeof(store_names[0]); ++i) { //HCERTSTORE cs = CertOpenSystemStore(0, store_names[i]); HCERTSTORE cs = CertOpenStore( CERT_STORE_PROV_SYSTEM_A, X509_ASN_ENCODING, NULL, CERT_STORE_OPEN_EXISTING_FLAG| CERT_STORE_READONLY_FLAG| CERT_STORE_SHARE_CONTEXT_FLAG| CERT_SYSTEM_STORE_CURRENT_USER, store_names[i] ); assert(cs); if (!cs) { return -1; } for ( PCCERT_CONTEXT ctx = CertEnumCertificatesInStore(cs, NULL); ctx != NULL; ctx = CertEnumCertificatesInStore(cs, ctx) ) { int res = mbedtls_x509_crt_parse(&cacert, ctx->pbCertEncoded, ctx->cbCertEncoded); if (res != 0) { mbedtls_strerror(res, errormsg, sizeof(errormsg)); mbedtls_fprintf(stderr, "%s\n", errormsg); } } for ( PCCRL_CONTEXT ctx = CertEnumCRLsInStore(cs, NULL); ctx != NULL; ctx = CertEnumCRLsInStore(cs, ctx) ) { int res = mbedtls_x509_crl_parse(&crl, ctx->pbCrlEncoded, ctx->cbCrlEncoded); if (res != 0) { mbedtls_strerror(res, errormsg, sizeof(errormsg)); mbedtls_fprintf(stderr, "%s\n", errormsg); } } CertCloseStore(cs, 0); } initialized = true; } mbedtls_ssl_conf_ca_chain(&conf, &cacert, &crl); mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); #endif #elif (GS_TARGET_PLATFORM == GS_PLATFORM_PS4) int ret; static gsslt::mutex mutex; gsstl::lock_guard<gsstl::mutex> guard(mutex); ret = orbis_check_certificates(conf); if (ret < 0) { return ret; } #elif (GS_TARGET_PLATFORM == GS_PLATFORM_ANDROID) int totalLength = 0; static bool initialized = false; static char errormsg[256]; static mbedtls_x509_crt cacert; static mbedtls_x509_crl crl; static gsstl::mutex mutex; static int numCerts; static unsigned char *pCertsEncoded; static int *pCertsLength; gsstl::lock_guard<gsstl::mutex> guard(mutex); if (!initialized) { #if defined(__UNREAL__) if (!pCertsEncoded && !pCertsLength) { JNIEnv *env = FAndroidApplication::GetJavaEnv(); if (!env) { return JNI_ERR; } jclass cls = FAndroidApplication::FindJavaClass("com/epicgames/ue4/GameActivity"); if (!cls) { LOGE("Could not find the GameActivity class."); } else { jmethodID methodId = env->GetStaticMethodID(cls, "getCertificates", "()V"); if (!methodId) { LOGE("Could not find the getCertificates method."); } else { jbyte *_pCertsEncoded; jint *_pCertsLength; env->CallStaticVoidMethod(cls, methodId); jfieldID numCertsId = env->GetStaticFieldID(cls, "numCerts", "I"); jfieldID certsEncodedId = env->GetStaticFieldID(cls, "certsEncoded", "[B"); jfieldID certsLengthId = env->GetStaticFieldID(cls, "certsLength", "[I"); jint _numCerts = env->GetStaticIntField(cls, numCertsId); jobject certsEncodedObj = env->GetStaticObjectField(cls, certsEncodedId); jobject certsLengthObj = env->GetStaticObjectField(cls, certsLengthId); jbyteArray *pCertsEncodedArray = reinterpret_cast<jbyteArray*>(&certsEncodedObj); jintArray *pCertsLengthArray = reinterpret_cast<jintArray*>(&certsLengthObj); if (_numCerts > 0) { _pCertsLength = (jint *)malloc(sizeof(jint) * _numCerts); env->GetIntArrayRegion(*pCertsLengthArray, 0, _numCerts, _pCertsLength); for (int i = 0; i < _numCerts; i++) { totalLength += _pCertsLength[i]; } _pCertsEncoded = (jbyte *)malloc(sizeof(jbyte) * totalLength); env->GetByteArrayRegion(*pCertsEncodedArray, 0, totalLength, _pCertsEncoded); numCerts = _numCerts; pCertsEncoded = (unsigned char *)_pCertsEncoded; pCertsLength = _pCertsLength; } totalLength = 0; } } } #endif if (pCertsEncoded && pCertsLength) { mbedtls_x509_crt_init(&cacert); mbedtls_x509_crl_init(&crl); for (int i = 0; i < numCerts; ++i) { int length = pCertsLength[i]; if (length > 0) { int res = mbedtls_x509_crt_parse(&cacert, &(pCertsEncoded[totalLength]), (size_t)length); if (res != 0) { mbedtls_strerror(res, errormsg, sizeof(errormsg)); mbedtls_fprintf(stderr, "%s\n", errormsg); } } totalLength += length; } numCerts = 0; free(pCertsEncoded); pCertsEncoded = NULL; free(pCertsLength); pCertsLength = NULL; initialized = true; } } mbedtls_ssl_conf_ca_chain(&conf, &cacert, &crl); mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED); #endif return 0; } }; }} /* GameSparks::Util */ #endif /* GAMESPAKS_CERTIFICATE_STORE_HPP */ [/code] ・C直下に解凍するコード https://yaki-3d.work/gamesparks-cpp-base-master.zip ・"C:\Users\Public"に解凍するコード(※『native-lib.cpp』の19行目と20行目に記述してあるAPIキーとパスワードは書き換えています※) https://yaki-3d.work/GameSparksTest_2.zip VisualStudio含め同じコードでコンパイルは通ったものの、ネット接続にAndroidStudioのみ障害で出てしまい通信ができない状態となっています。 以下が実機テスト本体に表示されたデバッグ文です。([error][/error]の中に記述します) [error] [2020-12-01T11:15Z]GameSparks API: Initialized [2020-12-01T11:15Z]GameSparks API: Received websocket error: X509 - Certificate verification failed, e.g. CRL,CA or signature check failed [2020-12-01T11:15Z]GameSparks API: Got websocket error.Please make sure that you've setp you credentials. [/error] ここでいう"credentials"(資格情報)がどうすれば良いのか分かる方はいらっしゃいますか? どなたかアドバイスをお願いします。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.11 )
名前:焼肉 日時:2020/12/01 21:12

ちなみに、 tps://docs.gamesparks.com/sdk-center/android.html の通りに入力してみたのですが、 build.gradleに compile 'com.gamesparks.sdk:gamesparks-android-client-sdk:+' を入力した所でエラーが発生したため入力できませんでした。 また、「証明書を自動的に許可する」ボックスをチェックしてもやはり駄目でした。 tps://imgur.com/a/60X0Eft
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.12 )
名前:kanamaru 日時:2020/12/01 22:46

提示されたURLはjava版なのでgradleに追加する必要はないはずです。 ビルドが通ってないならともかくビルドは通るなら関係ないでしょう。(と、gradleを使ったことはないけど思いました。) 資格情報というと、JAVA版とはいえど途中に書かれているOnCreateに追加するという API keyがらみが怪しく感じます。Credentialという言葉が使われていますし。 native-lib.cppの19行目と20行目に書き換える必要があるところがありますが 書き換えてないようなので、不正なAPI KEYになって失敗した可能性がありそうです。 前回のスレッドで専用サイトっぽいのにアクセス出来てましたし API KEY持ってますよね?同じものでいはずなので書き換えてみてください。 書き換えてもう一度ビルドすればうまくいくと思います。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.13 )
名前:焼肉 日時:2020/12/02 05:44

kanamaru様返信ありがとうございます。 書き忘れていましたが、19行目と20行目はこちらにアップロードする時にAPIキーとパスワードを読み取れないように変えていて少なくとも同じソースを共有しているVisualStudioでは正常に通信出来ているので、APIキーとパスワードではないと思われます。 後はJavaコードですと記述してある GSAndroidPlatform.initialise(this, "YOUR KEY", "YOUR SECRET", "YOUR CREDENTIAL", liveMode, autoUpdate); の"YOUR CREDENTIAL"を入れる項目がC++には無いことが原因かもしれません。 (tps://docs.gamesparks.com/sdk-center/android.html) しかし、IGSPlatformの.hの43行目に SetApiCredential("device"); か m_apiCredential="device"; を追加しても同じデバッグ文が表示されたためこれでもないかもしれません。 同じくnative-lib.cppの25行目に SetApiCredential("device"); を追加しても駄目でした。 (参考:https://support.gamesparks.net/support/solutions/articles/1000269664-what-could-be-the-cause-of-validation-failure-when-using-custom-credential-instead-of-device-secret-) しかし、APIキーとパスワードを "YOUR KEY", "YOUR SECRET" のような明らかに間違っている情報のままコンパイルしても同じデバッグ文が表示されました。 GS.cppの81行目の GS::Initialise が間違っているか別の所が間違っている可能性もあるかもしれません。 少なくともkanamaru様の言う通り認証関係のトラブルということは間違いなさそうです。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.14 )
名前:焼肉 日時:2020/12/02 07:13

新しくプロジェクトを作り直してコンパイルし直した所デバッグテキストが変わりました。 変更点はプロジェクト作成『C++ Standard』のC++17から『ToolChain Default』に変えた所です。 [error] [2020-12-01T22:11Z]GameSparks API: Initialized [2020-12-01T22:11Z]GameSparks API: Received websocket error: NET Failed to get an IPaddress for given hostname [2020-12-01T22:11Z]GameSparks API: Got websocket error.Please make sure that you've setp you credentials. [/error] 2行目が変わりましたが何か関係があるでしょうか?
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.15 )
名前:焼肉 日時:2020/12/02 08:02

gsstl.hの70行目から // std function can only be used, if we have at least c++11 #if (__cplusplus >= 201103L || _MSC_VER >= 1800 ) /*&& USE_STD_STL*/ && STL_FUNCTIONAL_SUPPORTED # define GS_USE_STD_FUNCTION 1 # include <functional> #else # undef GS_USE_STD_FUNCTION #endif /* __cplusplus >= 201103L */ ここが原因でしょうか?
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.16 )
名前:kanamaru 日時:2020/12/02 08:49

公開するわけだからそりゃ置き換えるなりしますよね。うっかりしてました。 ちょっと気になったんですけど、関係あるかわかりませんが、 ふとandroid版の方にヒントないかなと思い見てみたらいくつか気になりました。 GetDeviceTypeって関数あるじゃないですか、 そこがHandheldって返すようになっていたんですけど、(調べたら持ち運び可能な端末とかそんな感じの意味らしいです。) そちらが公開しているソースではAndroidになっていますけど大丈夫なんですかね? getDeviceId、getDeviceOS、getPlatformもないようですし。 一応gamesparks-cpp-baseにも存在する関数のようです。 getSDKで返しているのがAndroidじゃないのはAndroid版ではないのでいいとして。 少なくともgetDeviceOSはアプリ内購入に必要とIGSPlatform.hのコメントに書かれているので関係なくとも実装しておいたほうがいいでしょう。 アプリ内購入を使うかはわかりませんが。 関係なかったらすいません。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.17 )
名前:焼肉 日時:2020/12/02 12:19

kanamaru様返信ありがとうございます。 GetDeviceOS関数 getDeviceId関数 GetPlatform関数 はIGSPlatform.cppに記載してあるはずですが、そこではありませんか? それとも戻り値が違うか渡したソース郡には入っていないということでしょうか? また、GetDeviceType関数を探してみたのですが、virtualしか見つかりませんでした。 帰ったらこれも調べてみます。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.18 )
名前:kanamaru 日時:2020/12/02 15:40

あーなるほど。native-lib.cpp見てました。そっちに定義書いてあったんですね。 見てませんでした。GetDeviceTypeはnative-lib.cppでAndroidと返すように定義されているようです。 確認してみてください。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.19 )
名前:焼肉 日時:2020/12/02 16:17

kanamaru様返信ありがとうございます。 確認してみます。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.20 )
名前:焼肉 日時:2020/12/02 22:10

ここですね。 了解しました。 tps://github.com/gamesparks/gamesparks-android-sdk/blob/master/gamesparks-android-client-sdk/src/main/java/com/gamesparks/sdk/android/GSAndroidPlatform.java AndroidStudioとVisualStudioを比べると gsstl.cppの608行目のptr_funなど どうもinclude出来ていないファイルが多いようです。 根拠はないですが、Clang5.0を使えばなんとかなるかもしれませんがやり方が分かりません。 やり方もしくは解決案を知っている方は教えて下されば助かります。
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.21 )
名前:焼肉 日時:2020/12/03 08:10

もしかして、Visualstudio側でGamesparksAll.cppなどのc++sdkをsoファイルにまとめてAndroidStudio側で使用する手段もあるのでしょうか? もし、Visualstudioでのsoファイルの作成の仕方をご存知の方がいらっしゃいましたら教えて欲しいです。 参考(AndroidStudioでのビルド済みライブラリの使用法) tps://developer.android.com/ndk/guides/prebuilts?hl=ja 帰ったらこれを試してみます 参考(Visual Studio 2015 RCを使用したAndroidPulugin作成) tps://qiita.com/orenama1/items/29761bd51f91fed0b432
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.22 )
名前:管理人 日時:2020/12/03 21:24

> もし、Visualstudioでのsoファイルの作成の仕方をご存知の方がいらっしゃいましたら教えて欲しいです。 焼肉さんが載せられた『参考(Visual Studio 2015 RCを使用したAndroidPulugin作成)』の URLのページに書かれています通り、『ダイナミック共有ライブラリ』のプロジェクトを作成すると soファイルを作成するプロジェクトとなります
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.23 )
名前:焼肉 日時:2020/12/03 22:09

管理人様ありがとうございます。 soファイルはダイナミックリンクライブラリのためコードの絡め方が分からないためDXライブラリの拡張子と同じ.aファイルを作成しました。 しかし、VisualStudio側で.aファイル(静的ライブラリ)を作成しAndroidStudioでリンクしましたが、以下のエラーが出ました。 C:\\Microsoft\AndroidNDK64\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\include\bits/basic_string.h:249: error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()' どうすれば解決出来るでしょうか? 実体を別に定義する方法があるでしょうか?
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.24 )
名前:焼肉 日時:2020/12/03 22:14

ここを見ると tps://github.com/preshing/junction/issues/37 >>これは、アプリケーションとライブラリが異なるC ++標準でコンパイルされている場合に発生します。GCCはstd::stringC ++ 11での実装を変更したため、古い標準でコンパイルされたコードは、後の標準でコンパイルされたコードにリンクしない場合があります。 実行環境とライブラリのコンパイル環境が原因のようですね。 AndroidStudioでClang5.0を使用するのが唯一の解決策なのでしょうか?
メンテ
Re: VisualStudioからAndroidStudioの移植のやり方 ( No.25 )
名前:焼肉(解決済み) 日時:2020/12/04 06:14

公式を見るとやはり互換性がないようです。 tps://developer.android.com/ndk/guides/cpp-support?hl=ja >>1 つのアプリで複数の C++ ランタイムを使用しないでください。それぞれの STL 間には互換性がありません。たとえば、libc++ と gnustl では std::string のレイアウトが異なります。ある STL に基づいて記述されたコードは、別の STL に基づいて記述されたオブジェクトを使用することはできません。 もともとのSDKもAndroidStudio適用とは書いてありませんでしたし、やはりVisualStudioでAndroidアプリを作るためのソースだったのでしょう。 自分としてもGameSparksはRealTimeとMatchMaking機能が去年の時点で法人以外出来ないことに気付いたので、別のBaaSを使用してみることにします。 皆さん色々教えて下さりありがとうございました。
メンテ

Page: 1 | 2 |

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

   クッキー保存