Firebase C++VS2018 SDL2-在Firebase::app::create(..)上执行异常处理



操作系统:Win7 64,
IDE:Visual Studio Community 2018(今天更新)
Clang:5.0
链接的Firebase Libsfirebase_cpp_sdk_5.2.1\febrase_cpp_sdk\libs\android\armeabi-v7a\c++\libfirebase_addmob.a
目标API级别:KitKat 4.4-4.4.4,(android-19)
STL:LLVM libc++静态库(c++_static在这种情况下

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]   

据我所知,bot env和activity都是有效的对象。

如有任何帮助,我们将不胜感激。

谢谢。

更新

可能是Visual Studio的问题。由于firebase不是一个标准的SDK,并且依赖于实时连接到谷歌服务的各种谷歌API和服务,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中,或者定义是在堆栈上创建的,然后在Create调用中作为AppOption传递,则没有区别。

结果是一样的。

任何试图这样做的人,我建议在安卓工作室中制作一个项目,使用引用不同VS和AS IDE的预处理器定义。以及使用共享文件。

相关内容

  • 没有找到相关文章

最新更新