操作系统: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的预处理器定义。以及使用共享文件。