Firebase C ++ VS2018 SDL2 - исключение выдано на firebase :: app :: create (...) - PullRequest
0 голосов
/ 15 сентября 2018

ОС : Win7 64,
IDE : сообщество Visual Studio 2018 (обновлено сегодня)
лязг : 5,0
Связанные с Firebase Libs :
firebase_cpp_sdk_5.2.1 \ firebase_cpp_sdk \ ЛИЭС \ Android \ armeabi-v7a \ C ++ \ libfirebase_app.a firebase_cpp_sdk_5.2.1 \ firebase_cpp_sdk \ ЛИЭС \ Android \ armeabi-v7a \ C ++ \ libfirebase_admob.a
Целевой уровень API : KitKat 4.4 - 4.4.4, (android-19)
STL : статическая библиотека LLVM libc ++ (c ++ _ static)
C ++ Standard : C ++ 17 (GNU Dialect) (-std = gnu ++ 1z)
Отладка : Nokia3 Nougat7.1

SDL2 скомпилировано для Android с такими же настройками.

Код вопроса:

#ifdef __ANDROID__

#include "firebase/admob.h"
#include "firebase/app.h"

firebase::App *app = NULL;

JNIEnv *env = (JNIEnv*)SDL_AndroidGetJNIEnv();
assert(env);

jobject activity = (jobject)SDL_AndroidGetActivity();

// unknown exception trown here
app = firebase::App::Create(firebase::AppOptions(), env, activity);

#endif

стек вызовов

libc.so!tgkill   
libc.so!pthread_kill   
libc.so!raise   
libc.so!__libc_android_abort   
libc.so!abort   
libmain.so!firebase::DefaultLogCallback(firebase::LogLevel log_level, const char * message) Line 66    C++  
libmain.so!firebase::LogMessageWithCallbackV(firebase::LogLevel log_level, const char * format) Line 130    C++  
libmain.so!firebase::LogAssert(const char * format) Line 174    C++  
libmain.so!firebase::util::LookupMethodIds(JNIEnv * env, jclass clazz, const firebase::util::MethodNameSignature * method_name_signatures, size_t number_of_method_name_signatures, jmethodID * method_ids, const char * class_name) Line 562    C++  
libmain.so!firebase::app::CacheMethodIds(JNIEnv * env, jobject activity_object) Line 46    C++  
libmain.so!firebase::(anonymous namespace)::CacheMethods(JNIEnv * env, jobject activity) Line 123    C++
libmain.so!firebase::App::Create(const firebase::AppOptions & options, const char * name, JNIEnv * jni_env, jobject activity) Line 305    C++
libmain.so!SDL_main(int argc, char ** argsv) Line 54    C++
libmain.so!Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv * env, jclass cls, jobject array) Line 67    C  
 [Unknown/Just-In-Time compiled code]   

Насколько я вижу, бот и окружение являются действительными объектами.

Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 25 сентября 2018

Обновление

Возможно, проблема с Visual Studio.Поскольку firebase не является стандартным SDK и зависит от различных API и сервисов Google, которые подключаются к сервисам Google в режиме реального времени, VS сталкивается с непредсказуемыми ситуациями и не может создать действительный объект firebase: app.Таким образом, это создает неизвестное и необработанное исключение.

Это указывает на то, что Android NDK не может правильно определить определение google-services.json / xml для приложения.

Вручную указав это определение, сгенерировав

firebase::AppOptions::LoadFromJsonConfig("google-services.json/xml");

следующая ошибка в logcat

Failed to parse Firebase config: 1:0: error: declaration expected. Check the config string passed to App::CreateFromJsonConfig()

затем при попытке вызвать

 app = firebase::App::Create(firebase::AppOptions(), env, activity); 

сгенерирует

firebase : E: Java class com/google/firebase/FirebaseApp not found.  Please verify the AAR which contains the com/google/firebase/FirebaseApp class is included in your app.

Нет разницы, если файл .jsonопределения указываются в файле xml, включаются в файл strings.xml в файле проекта, или определения создаются в стеке, а затем передаются как AppOption в вызове Create.

Результат тот же.

Всем, кто пытается это сделать, я предлагаю создать проект в Android Studio с определениями препроцессора, ссылающимися на разные VS и AS IDE.И с помощью общих файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...