操作系统: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是有效的对象。
任何帮助将不胜感激。
谢谢。
答案 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的预处理器定义。并使用共享文件。