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/�v���W�F�N�g�ɒlj����ׂ��t�@�C��_Android�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を使用してみることにします。
皆さん色々教えて下さりありがとうございました。
|