NativeInit fails on Android

Hello! I just updated SDKBOX and my game crashes on startup.

Native code compiles without problems but there is something happening in SKDBOX.Init function.

03-08 12:46:58.929: W/dalvikvm(24945): JNI WARNING: 0x41757c28 is not a valid JNI reference (NewGlobalRef)
03-08 12:46:58.929: W/dalvikvm(24945):in Lcom/sdkbox/plugin/SDKBox;.nativeInit:()V(NewGlobalRef)

After that logcat only gives me error “Fatal signal 6”.
We are using cocos2d-x 3.81 version. Is there some modifications made to cocos JNI so NewGlobalRef does not exits anymore?

Thanks!

Hello @samithegreat

Could you please post your full stack trace here.
As that would be easy for us to track the issue correctly.

Also, if you could please post the contents of your Android.mk and Cocos2dActivity.java file
that would be great.

Best,
Pabitra

Hi!

Android makefile:

LOCAL_PATH := $(call my-dir)

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))

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/GB2ShapeCache-x.cpp \
../../Classes/GLES-Render.cpp \
../../Classes/Helpers.cpp \
../../Classes/RDParticleCache.cpp \
../../Classes/EditorNode.cpp \
../../Classes/EditorScene.cpp \
../../Classes/AudioManager.cpp \
../../Classes/GlobalManager.cpp \
../../Classes/DropDownMenu.cpp \
../../Classes/DropNode.cpp \
../../Classes/EnvNode.cpp \
../../Classes/ShadowCharacter.cpp \
../../Classes/WallNode.cpp \
../../Classes/PlatformManager.cpp \
../../Classes/ChapterScene.cpp \
../../Classes/CreditsScene.cpp \
../../Classes/GameScene.cpp \
../../Classes/IAPScene.cpp \
../../Classes/LevelEndScreen.cpp \
../../Classes/MenuScene.cpp \
../../Classes/PauseLayer.cpp \
../../Classes/StartUpScene.cpp \
../../Classes/StoryLayer.cpp \
../../Classes/TutorialLayer.cpp \

LOCAL_CPPFLAGS := -DSDKBOX_ENABLED
LOCAL_LDLIBS := -landroid -llog
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES := PluginFacebook sdkbox PluginIAP android_native_app_glue PluginGoogleAnalytics PluginReview PluginAdColony PluginChartboost


LOCAL_STATIC_LIBRARIES := cocos2dx_static



include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)
$(call import-module, ./sdkbox)
$(call import-module, ./pluginfacebook)
$(call import-module, ./pluginiap)
$(call import-module, ./plugingoogleanalytics)
$(call import-module, ./pluginreview)
$(call import-module, ./pluginadcolony)
$(call import-module, ./pluginchartboost)

Here is part Cocos2dActivity where SDKBOX is inited. The programs crashes in onCreated function in SDKBOX.init().

protected void onLoadNativeLibraries() {
        try {
            ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            Bundle bundle = ai.metaData;
            String libName = bundle.getString("android.app.lib_name");
            System.loadLibrary(libName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // ===========================================================
    // Constructors
    // ===========================================================

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        CocosPlayClient.init(this, false);

        onLoadNativeLibraries();
        SDKBox.init(this);

        sContext = this;
        this.mHandler = new Cocos2dxHandler(this);
        
        Cocos2dxHelper.init(this);
        
        this.mGLContextAttrs = getGLContextAttrs();
        this.init();

        if (mVideoHelper == null) {
            mVideoHelper = new Cocos2dxVideoHelper(this, mFrameLayout);
        }
        
        if(mWebViewHelper == null){
            mWebViewHelper = new Cocos2dxWebViewHelper(mFrameLayout);
        }

        if(mEditBoxHelper == null){
            mEditBoxHelper = new Cocos2dxEditBoxHelper(mFrameLayout);
        }

        Window window = this.getWindow();
        window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    }

Stack trace:

03-09 09:49:33.455: D/dalvikvm(27585): Trying to load lib /data/app-lib/com.rockodile.lowglow-10/libcocos2dcpp.so 0x42447f50
03-09 09:49:33.475: D/dalvikvm(27585): Added shared lib /data/app-lib/com.rockodile.lowglow-10/libcocos2dcpp.so 0x42447f50
03-09 09:49:33.475: D/JniHelper(27585): JniHelper::setJavaVM(0x41a31100), pthread_self() = 1074749780
03-09 09:49:33.475: D/main(27585): cocos_android_app_init
03-09 09:49:33.475: W/dalvikvm(27585): JNI WARNING: 0x41757c28 is not a valid JNI reference (NewGlobalRef)
03-09 09:49:33.475: W/dalvikvm(27585):              in Lcom/sdkbox/plugin/SDKBox;.nativeInit:()V (NewGlobalRef)
03-09 09:49:33.475: I/dalvikvm(27585): "main" prio=5 tid=1 RUNNABLE
03-09 09:49:33.475: I/dalvikvm(27585):   | group="main" sCount=0 dsCount=0 obj=0x41b9ad08 self=0x41a5d8a8
03-09 09:49:33.475: I/dalvikvm(27585):   | sysTid=27585 nice=-11 sched=0/0 cgrp=apps handle=1074749780
03-09 09:49:33.475: I/dalvikvm(27585):   | state=R schedstat=( 91525868 47510592 191 ) utm=5 stm=3 core=0
03-09 09:49:33.475: I/dalvikvm(27585):   at com.sdkbox.plugin.SDKBox.nativeInit(Native Method)
03-09 09:49:33.475: I/dalvikvm(27585):   at com.sdkbox.plugin.SDKBox.init(SDKBox.java:64)
03-09 09:49:33.475: I/dalvikvm(27585):   at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:305)
03-09 09:49:33.475: I/dalvikvm(27585):   at org.cocos2dx.cpp.AppActivity.onCreate(AppActivity.java:46)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.Activity.performCreate(Activity.java:5582)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.ActivityThread.access$900(ActivityThread.java:171)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.os.Handler.dispatchMessage(Handler.java:102)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.os.Looper.loop(Looper.java:146)
03-09 09:49:33.475: I/dalvikvm(27585):   at android.app.ActivityThread.main(ActivityThread.java:5679)
03-09 09:49:33.475: I/dalvikvm(27585):   at java.lang.reflect.Method.invokeNative(Native Method)
03-09 09:49:33.475: I/dalvikvm(27585):   at java.lang.reflect.Method.invoke(Method.java:515)
03-09 09:49:33.475: I/dalvikvm(27585):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
03-09 09:49:33.480: I/dalvikvm(27585):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
03-09 09:49:33.480: I/dalvikvm(27585):   at dalvik.system.NativeStart.main(Native Method)
03-09 09:49:33.480: E/dalvikvm(27585): VM aborting
03-09 09:49:33.480: A/libc(27585): Fatal signal 6 (SIGABRT) at 0x00006bc1 (code=-6), thread 27585 (ckodile.lowglow)

Thanks!

Hi! I was able to resolve the problem. It seems that sdkbox.jar wasn’t updated properly and that caused the crash. I copied skdbox.jar from downloaded chartboost package and replaced the old one.

1 Like

Thanks for sharing your solution, we’ll double check sdkbox update process.