android - Firebase Admob Crashes [AGAIN] -
this third time admob firebase decided crash, there's lot of reused information
i’ve installed firebase, did whole setup, when load app on android says “unfortunately, (app) has stopped”. app nothing default cocos helloworldscene. i'm using cocos2dx 3.15.1, visual studio 2013, android ndk r10e, , sdk version 26.0.1.
proj.android-studio\app\jni\android.mk:
firebase_cpp_sdk_dir := ../../../firebase_cpp_sdk app_abi := armeabi-v7a x86 stl := $(firstword $(subst _, ,$(app_stl))) firebase_library_path := $(firebase_cpp_sdk_dir)/libs/android/$(target_arch_abi)/$(stl) include $(clear_vars) local_module := firebase_app local_src_files := $(firebase_library_path)/libapp.a local_export_c_includes := $(local_path)/$(firebase_cpp_sdk_dir)/include include $(prebuilt_static_library) include $(clear_vars) local_module := firebase_feature local_src_files := $(firebase_library_path)/libadmob.a local_export_c_includes := $(local_path)/$(firebase_cpp_sdk_dir)/include include $(prebuilt_static_library) include $(clear_vars) $(call import-add-path,$(local_path)/../../../cocos2d) $(call import-add-path,$(local_path)/../../../cocos2d/external) $(call import-add-path,$(local_path)/../../../cocos2d/cocos) $(call import-add-path,$(local_path)/../../../cocos2d/cocos/audio/include) local_module := mygame_shared local_module_filename := libmygame local_src_files := hellocpp/main.cpp \ ../../../classes/appdelegate.cpp \ ../../../classes/helloworldscene.cpp \ ../../../classes/firebasehelper.cpp local_c_includes := $(local_path)/../../../classes # _cocos_header_android_begin # _cocos_header_android_end local_static_libraries := cocos2dx_static local_static_libraries += firebase_app local_static_libraries += firebase_feature # _cocos_lib_android_begin # _cocos_lib_android_end include $(build_shared_library) $(call import-module,.) # _cocos_lib_import_android_begin # _cocos_lib_import_android_end appdelegate.cpp:
#include "appdelegate.h" #include "helloworldscene.h" #include "firebase/app.h" #include "firebase/admob.h" // #define use_audio_engine 1 // #define use_simple_audio_engine 1 #if use_audio_engine && use_simple_audio_engine #error "don't use audioengine , simpleaudioengine @ same time. please select 1 in game!" #endif #if use_audio_engine #include "audio/include/audioengine.h" using namespace cocos2d::experimental; #elif use_simple_audio_engine #include "audio/include/simpleaudioengine.h" using namespace cocosdenshion; #endif using_ns_cc; static cocos2d::size designresolutionsize = cocos2d::size(480, 320); static cocos2d::size smallresolutionsize = cocos2d::size(480, 320); static cocos2d::size mediumresolutionsize = cocos2d::size(1024, 768); static cocos2d::size largeresolutionsize = cocos2d::size(2048, 1536); appdelegate::appdelegate() { } appdelegate::~appdelegate() { #if use_audio_engine audioengine::end(); #elif use_simple_audio_engine simpleaudioengine::end(); #endif } // if want different context, modify value of glcontextattrs // affect platforms void appdelegate::initglcontextattrs() { // set opengl context attributes: red,green,blue,alpha,depth,stencil glcontextattrs glcontextattrs = {8, 8, 8, 8, 24, 8}; glview::setglcontextattrs(glcontextattrs); } // if want use package manager install more packages, // don't modify or remove function static int register_all_packages() { return 0; //flag packages manager } bool appdelegate::applicationdidfinishlaunching() { // initialize director auto director = director::getinstance(); auto glview = director->getopenglview(); if(!glview) { #if (cc_target_platform == cc_platform_win32) || (cc_target_platform == cc_platform_mac) || (cc_target_platform == cc_platform_linux) glview = glviewimpl::createwithrect("shaokang", cocos2d::rect(0, 0, designresolutionsize.width, designresolutionsize.height)); #else glview = glviewimpl::create("shaokang"); #endif director->setopenglview(glview); } #if (cc_target_platform == cc_platform_android) // initialize firebase android. firebase::app* app = firebase::app::create( firebase::appoptions(), jnihelper::getenv(), jnihelper::getactivity()); // initialize admob. firebase::admob::initialize(*app, "insert_your_admob_android_app_id"); #elif (cc_target_platform == cc_platform_ios) // initialize firebase ios. firebase::app* app = firebase::app::create(firebase::appoptions()); // initialize admob. firebase::admob::initialize(*app, "insert_your_admob_ios_app_id"); #endif // initialize admob. firebase::admob::initialize(*app); // turn on display fps director->setdisplaystats(true); // set fps. default value 1.0/60 if don't call director->setanimationinterval(1.0f / 60); // set design resolution glview->setdesignresolutionsize(designresolutionsize.width, designresolutionsize.height, resolutionpolicy::no_border); auto framesize = glview->getframesize(); // if frame's height larger height of medium size. if (framesize.height > mediumresolutionsize.height) { director->setcontentscalefactor(min(largeresolutionsize.height/designresolutionsize.height, largeresolutionsize.width/designresolutionsize.width)); } // if frame's height larger height of small size. else if (framesize.height > smallresolutionsize.height) { director->setcontentscalefactor(min(mediumresolutionsize.height/designresolutionsize.height, mediumresolutionsize.width/designresolutionsize.width)); } // if frame's height smaller height of medium size. else { director->setcontentscalefactor(min(smallresolutionsize.height/designresolutionsize.height, smallresolutionsize.width/designresolutionsize.width)); } register_all_packages(); // create scene. it's autorelease object auto scene = helloworld::createscene(); // run director->runwithscene(scene); return true; } // function called when app inactive. note, when receiving phone call invoked. void appdelegate::applicationdidenterbackground() { director::getinstance()->stopanimation(); #if use_audio_engine audioengine::pauseall(); #elif use_simple_audio_engine simpleaudioengine::getinstance()->pausebackgroundmusic(); simpleaudioengine::getinstance()->pausealleffects(); #endif } // function called when app active again void appdelegate::applicationwillenterforeground() { director::getinstance()->startanimation(); #if use_audio_engine audioengine::resumeall(); #elif use_simple_audio_engine simpleaudioengine::getinstance()->resumebackgroundmusic(); simpleaudioengine::getinstance()->resumealleffects(); #endif } helloworldscene.cpp:
#include "helloworldscene.h" #include "simpleaudioengine.h" #include "firebasehelper.h" #include "firebase/admob.h" #include "firebase/admob/types.h" #include "firebase/app.h" #include "firebase/future.h" #include "firebase/admob/banner_view.h" using_ns_cc; firebase::admob::bannerview* banner_view; scene* helloworld::createscene() { return helloworld::create(); } // on "init" need initialize instance bool helloworld::init() { ////////////////////////////// // 1. super init first if ( !scene::init() ) { return false; } auto visiblesize = director::getinstance()->getvisiblesize(); vec2 origin = director::getinstance()->getvisibleorigin(); ///////////////////////////// // 2. add menu item "x" image, clicked quit program // may modify it. // add "close" icon exit progress. it's autorelease object auto closeitem = menuitemimage::create( "closenormal.png", "closeselected.png", cc_callback_1(helloworld::menuclosecallback, this)); closeitem->setposition(vec2(origin.x + visiblesize.width - closeitem->getcontentsize().width/2 , origin.y + closeitem->getcontentsize().height/2)); // create menu, it's autorelease object auto menu = menu::create(closeitem, null); menu->setposition(vec2::zero); this->addchild(menu, 1); ///////////////////////////// // 3. add codes below... // add label shows "hello world" // create , initialize label auto label = label::createwithttf("hello world", "fonts/marker felt.ttf", 24); // position label on center of screen label->setposition(vec2(origin.x + visiblesize.width/2, origin.y + visiblesize.height - label->getcontentsize().height)); // add label child layer this->addchild(label, 1); // add "helloworld" splash screen" auto sprite = sprite::create("helloworld.png"); // position sprite on center of screen sprite->setposition(vec2(visiblesize.width/2 + origin.x, visiblesize.height/2 + origin.y)); // add sprite child layer this->addchild(sprite, 0); #if defined(__android__) // android ad unit ids. const char* kbanneradunit = "ca-app-pub-3940256099942544/6300978111"; #else // ios ad unit ids. const char* kbanneradunit = "ca-app-pub-3940256099942544/2934735716"; #endif // create , initialize banner view. firebase::admob::bannerview* banner_view; banner_view = new firebase::admob::bannerview(); firebase::admob::adsize ad_size; ad_size.ad_size_type = firebase::admob::kadsizestandard; ad_size.width = 320; ad_size.height = 50; banner_view->initialize(getadparent(), kbanneradunit, ad_size); // schedule updates cocos2d-x update() method gets called. this->scheduleupdate(); return true; } void helloworld::menuclosecallback(ref* psender) { //close cocos2d-x game scene , quit application director::getinstance()->end(); #if (cc_target_platform == cc_platform_ios) exit(0); #endif /*to navigate native ios screen(if present) without quitting application ,do not use director::getinstance()->end() , exit(0) given above,instead trigger custom event created in rootviewcontroller.mm below*/ //eventcustom customendevent("game_scene_close_event"); //_eventdispatcher->dispatchevent(&customendevent); } void helloworld::update(float delta) { // check banner has been initialized. if (banner_view->initializelastresult().status() == firebase::kfuturestatuscomplete) { // check banner hasn't started loading. if (banner_view->loadadlastresult().status() == firebase::kfuturestatusinvalid) { // make banner visible , load ad. cclog("loading banner."); banner_view->show(); firebase::admob::adrequest my_ad_request = {}; banner_view->loadad(my_ad_request); } } } my app literally default project, firebase tutorial added it, , crashes. have installed firebase_cpp file, firebasehelper header , source both how when in tutorial, , else in cocos2d app, @ least think, default things. do? be?
when run app in android studio, says this:

some not stacktrace or log, if case, have no idea
Comments
Post a Comment