Firebase C ++ VS2018 SDL2-Firebase :: app :: create(...)抛出异常

时间:2018-09-15 15:16:50

标签: android c++ firebase visual-studio-2008

操作系统:Win7 64,
IDE :Visual Studio Community 2018(今天更新)
C :5.0
Firebase库已链接
firebase_cpp_sdk_5.2.1 \ firebase_cpp_sdk \ libs \ android \ armeabi-v7a \ c ++ \ libfirebase_app.a firebase_cpp_sdk_5.2.1 \ firebase_cpp_sdk \ libs \ android \ armeabi-v7a \ c ++ \ libfirebase_admob.a
目标API级别:KitKat 4.4-4.4.4,(android-19)
STL :LLVM libc ++静态库(c ++ _ static)
C ++标准:C ++ 17(GNU语言)(-std = gnu ++ 1z)
调试:Nokia3 Nougat7.1

使用相同设置为Android编译的SDL2。

代码问题:

#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是有效的对象。

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

更新

可能是Visual Studio的问题。 由于firebase不是标准的SDK,并且依赖于可实时连接到Google Services的各种Google 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.

如果在项目文件的strings.xml中包含的文件,xml文件中指定了.json文件定义,或者在堆栈上创建了这些定义,然后在Create调用中将它们作为AppOption传递,则没有区别。

结果是相同的。

任何尝试这样做的人,建议在Android Studio中创建一个项目,并使用引用不同VS和AS IDE的预处理器定义。并使用共享文件。