[Solved] 3.17 release build error. "warning: relocation refers to discarded section"

Thanks.
After adding it to Android.mk, the build succeeded.
But crash with sdkbox.init().

SDKBox.init(this);

05-30 11:30:52.109 18082-18082/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: jp.co.puzzlegame, PID: 18082
java.lang.UnsatisfiedLinkError: Native method not found: com.c.b.a.a:(Ljava/lang/Object;Ljava/lang/ClassLoader;)V
at com.c.b.a.a(Native Method)
at com.c.b.a.a(SDKBox.java:71)
at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:129)
at org.cocos2dx.cpp.AppActivity.onCreate(AppActivity.java:83)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

Debug build is working properly.

cocos compile -p android --android-studio

Umm…

ok, I 'll check with RELEASE mode.

UPDATE:

~/test/cpp317 [master] $ echo $NDK_ROOT
/Users/admin/Documents/sdk/android/android-ndk-r16b
~/test/cpp317 [master] $ sdkbox info
  _______ ______  _     _ ______   _____  _     _
  |______ |     \ |____/  |_____] |     |  \___/
  ______| |_____/ |    \_ |_____] |_____| _/   \_
 Copyright (c) 2016-2018 SDKBOX Inc. v1.0.1.35
 installed packages:
     v2.4.0.1 iap

~/test/cpp317 [master] $ cocos run -p android -m release

works for me.

would you plz check your test project, must create from cocos2d-x-3.17 tag .
Thanks,

Thanks.
3.17 new project + ndk r16b is no error.
But in my project I get an error.
It can not be reproduced with a new project.
Are there any hints?

It was reproduced.
I get an error with the this code.

std :: stringstream aaa;

In the case of “prebuilt”, get an error even if you do not write the above code.

Can you reproduce it?
Is this a problem for me?

whats prebuilt mean? plz show me the steps, thanks.

Create a static library with this command.

cocos gen-libs -e /Applications/Cocos/Cocos2d-x/cocos2d-x-3.17 -p ios -p android --ap android-26 -m release

But in 3.17 prebuilt-mk is not created and the procedure is tough.

It may be that “std :: stringstream” is somewhere in cocos2dx.

Can you reproduce it?

Case 1

  • Error in release build when adding the this code.

std :: stringstream aaa;

Case 2

  • Error in release build with cocos2dx prebuilt.

I think Case 1 can be reproduced quickly.
Do you need further details on Case 2?

?

I added bellow codes to cocos2d.cpp file:

#include <sstream>

std :: stringstream aaa;

BUILD SUCCESSFUL in 5s
59 actionable tasks: 6 executed, 53 up-to-date
Move apk to /Users/admin/repos/cocos2d-x/tests/cpp-empty-test/bin/release/android
Build succeed.
~/repos/cocos2d-x [cocos2d-x-3.17] $ cocos gen-libs -e `pwd` -p android --ap android-26 -m release

Case 1 and Case 2 separately, no relation.
Either way you get an error.

Case 1

  1. Add SDKBox IAP

  2. Add Code.
    AppDelegate.cpp

     bool AppDelegate::applicationDidFinishLaunching() {
         std::stringstream aaa;
         ...
    
  3. building.

     cocos compile -p android --android-studio -m release
    

Case 2

  1. Add SDKBox IAP

  2. Generate cocos2dx prebuilt, And setting using prebuilt.

     cocos gen-libs -e /Applications/Cocos/Cocos2d-x/cocos2d-x-3.17 -p ios -p android --ap android-26 -m release
    
     Update android.mk, build.gradle.
     Set cocos2dx each prebuilt-mk/android.mk.
     Etc Settings.....
    
  3. building.

     cocos compile -p android --android-studio -m release

BUILD SUCCESSFUL in 11s
80 actionable tasks: 6 executed, 74 up-to-date
Move apk to /Users/admin/test/cpp317/bin/debug/android
Build succeed.
~/test/cpp317 [master] $ cocos compile -p android
~/test/cpp317 [master] $ echo $NDK_ROOT
/Users/admin/Documents/sdk/android/android-ndk-r16b

sorry, I sent it on the way.
We are updating the contents.

Is the result a release build?

ok, i reproduce it.

plz try https://www.dropbox.com/s/mmbgy6sen3m11xf/sdkbox.zip?dl=0

Thanks. There are no errors in cocos release compile.
But it crashes on startup.
It does not crash in debug build.

--------- beginning of /dev/log/main
05-31 17:48:21.389 1358-1455/? W/SearchService: Abort, client detached.
05-31 17:48:21.409 771-1026/? I/ActivityManager: Start proc jp.co.puzzlegame for activity jp.co.puzzlegame/org.cocos2dx.cpp.AppActivity: pid=14390 uid=10236 gids={50236, 3003, 1028, 1015}
05-31 17:48:21.429 948-2037/? I/AsyncOpDispatcher: 19-ReportUsage
05-31 17:48:21.459 14390-14390/? D/dalvikvm: Trying to load lib /data/app-lib/jp.co.puzzlegame-1/libcocos2dcpp.so 0x42bdc8c0
05-31 17:48:21.489 948-14221/? I/AsyncOpDispatcher: 35-GetDeviceDataUploadOptInStatusOperation
05-31 17:48:21.539 14390-14390/? D/dalvikvm: Added shared lib /data/app-lib/jp.co.puzzlegame-1/libcocos2dcpp.so 0x42bdc8c0
05-31 17:48:21.539 14390-14390/? D/main: cocos_android_app_init
05-31 17:48:21.539 14390-14390/? I/SDKBOX_CORE: Sdkbox Droid starting.
Sdkbox got VM.
Sdkbox jni initialized.
05-31 17:48:21.539 14390-14390/? D/SDKBOX_CORE: Can't load tracking info: java.io.IOException: BufferedInputStream is closed
05-31 17:48:21.549 14390-14390/? D/Cocos2dxHelper: isSupportLowLatency:true
sampleRate: 48000, framesPerBuffer: 240
05-31 17:48:21.549 14390-14390/? D/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp: nativeSetAudioDeviceInfo: sampleRate: 48000, bufferSizeInFrames: 240
05-31 17:48:21.549 771-1846/? W/ActivityManager: Unable to start service Intent { act=com.b.a.a pkg=com.enhance.gameservice } U=0: not found
05-31 17:48:21.569 14390-14390/? D/EngineDataManager.cpp: nativeSetSupportOptimization: 0
05-31 17:48:21.569 14390-14390/? D/Cocos2dxActivity: onResume()
05-31 17:48:21.569 771-1848/? I/MediaFocusControl:  AudioFocus  requestAudioFocus() from android.media.AudioManager@42be9378org.cocos2dx.lib.Cocos2dxAudioFocusManager$1@42c20f10
05-31 17:48:21.569 14390-14414/? W/System.err: java.lang.NoClassDefFoundError: com/sdkbox/plugin/SdkboxLog
    at com.sdkbox.plugin.SDKBox.nOnStart(Native Method)
    at com.sdkbox.plugin.SDKBox$1.run(SDKBox.java:88)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sdkbox.plugin.SdkboxLog" on path: DexPathList[[zip file "/data/app/jp.co.puzzlegame-1.apk"],nativeLibraryDirectories=[/data/app-lib/jp.co.puzzlegame-1, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
	... 4 more
05-31 17:48:21.569 14390-14414/? E/SDKBOX_CORE: JNI_BRIDGE Class com/sdkbox/plugin/SdkboxLog does not exist.
JNI_BRIDGE Get static method info: ClassNotFound com/sdkbox/plugin/SdkboxLog.
05-31 17:48:21.569 14390-14414/? W/System.err: java.lang.NoClassDefFoundError: com/sdkbox/plugin/SdkboxLog
    at com.sdkbox.plugin.SDKBox.nOnStart(Native Method)
    at com.sdkbox.plugin.SDKBox$1.run(SDKBox.java:88)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sdkbox.plugin.SdkboxLog" on path: DexPathList[[zip file "/data/app/jp.co.puzzlegame-1.apk"],nativeLibraryDirectories=[/data/app-lib/jp.co.puzzlegame-1, /vendor/lib, /system/lib]]
05-31 17:48:21.569 14390-14390/? D/AudioFocusManager: requestAudioFocus succeed
05-31 17:48:21.569 14390-14414/? W/System.err:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
	... 4 more
05-31 17:48:21.569 14390-14414/? E/SDKBOX_CORE: JNI_BRIDGE Class com/sdkbox/plugin/SdkboxLog does not exist.
JNI_BRIDGE Get static method info: ClassNotFound com/sdkbox/plugin/SdkboxLog.
05-31 17:48:21.569 14390-14414/? W/System.err: java.lang.NoClassDefFoundError: com/sdkbox/plugin/SdkboxLog
    at com.sdkbox.plugin.SDKBox.nOnStart(Native Method)
    at com.sdkbox.plugin.SDKBox$1.run(SDKBox.java:88)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sdkbox.plugin.SdkboxLog" on path: DexPathList[[zip file "/data/app/jp.co.puzzlegame-1.apk"],nativeLibraryDirectories=[/data/app-lib/jp.co.puzzlegame-1, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
	... 4 more
05-31 17:48:21.569 14390-14414/? E/SDKBOX_CORE: JNI_BRIDGE Class com/sdkbox/plugin/SdkboxLog does not exist.
JNI_BRIDGE Get static method info: ClassNotFound com/sdkbox/plugin/SdkboxLog.
05-31 17:48:21.579 14390-14414/? W/System.err: java.lang.NoClassDefFoundError: com/sdkbox/plugin/SdkboxLog
    at com.sdkbox.plugin.SDKBox.nOnStart(Native Method)
    at com.sdkbox.plugin.SDKBox$1.run(SDKBox.java:88)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sdkbox.plugin.SdkboxLog" on path: DexPathList[[zip file "/data/app/jp.co.puzzlegame-1.apk"],nativeLibraryDirectories=[/data/app-lib/jp.co.puzzlegame-1, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
	... 4 more

05-31 17:48:22.009 14390-14426/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
    Process: jp.co.puzzlegame, PID: 14390
    java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.AssertionError: java.lang.NoSuchFieldException: UNKNOWN
        at com.google.a.b.a.n$a.<init>(TypeAdapters.java:792)
        at com.google.a.b.a.n$24.a(TypeAdapters.java:818)
        at com.google.a.e.a(Gson.java:457)
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:117)
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:166)
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:102)
        at com.google.a.e.a(Gson.java:457)
        at com.google.a.e.a(Gson.java:695)
        at com.google.a.e.a(Gson.java:682)
        at com.google.a.e.a(Gson.java:637)
        at com.google.a.e.a(Gson.java:617)
        at com.google.ads.a.f.a(ConsentInformation.java:455)
        at com.google.ads.a.f.a(ConsentInformation.java:422)
        at com.google.ads.a.f.a(ConsentInformation.java:47)
        at com.google.ads.a.f$c.a(ConsentInformation.java:236)
        at com.google.ads.a.f$c.a(ConsentInformation.java:263)
        at com.google.ads.a.f$c.doInBackground(ConsentInformation.java:189)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
        at java.lang.Thread.run(Thread.java:841) 
     Caused by: java.lang.NoSuchFieldException: UNKNOWN
        at java.lang.Class.getField(Class.java:724)
        at com.google.a.b.a.n$a.<init>(TypeAdapters.java:781)
        at com.google.a.b.a.n$24.a(TypeAdapters.java:818) 
        at com.google.a.e.a(Gson.java:457) 
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:117) 
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:166) 
        at com.google.a.b.a.i.a(ReflectiveTypeAdapterFactory.java:102) 
        at com.google.a.e.a(Gson.java:457) 
        at com.google.a.e.a(Gson.java:695) 
        at com.google.a.e.a(Gson.java:682) 
        at com.google.a.e.a(Gson.java:637) 
        at com.google.a.e.a(Gson.java:617) 
        at com.google.ads.a.f.a(ConsentInformation.java:455) 
        at com.google.ads.a.f.a(ConsentInformation.java:422) 
        at com.google.ads.a.f.a(ConsentInformation.java:47) 
        at com.google.ads.a.f$c.a(ConsentInformation.java:236) 
        at com.google.ads.a.f$c.a(ConsentInformation.java:263) 
        at com.google.ads.a.f$c.doInBackground(ConsentInformation.java:189) 
        at android.os.AsyncTask$2.call(AsyncTask.java:288) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
        at java.lang.Thread.run(Thread.java:841)

have you cleanup and rebuild?

It was a crash that had nothing to do with sdkbox.

This error does not crash, but is there a problem?

W/System.err: java.lang.NoClassDefFoundError: com/sdkbox/plugin/SdkboxLog

OK, Proguard was the cause.

build.gradle

minifyEnabled false
shrinkResources false

Thank you!!

3 Likes

cocos2dx v3.17
NDK r16b
SDKBOX FACEBOOK 2.4.0.1
same problem, but can not solved with @yinjimmy solution.

/Users/dut/Desktop/test/test_fb_sdkbox/frameworks/runtime-src/proj.android/app/jni/./sdkbox/libs_c++_static/armeabi-v7a/libsdkbox.a(Utils.o):function std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >::~basic_stringstream(): warning: relocation refers to discarded section
/Users/dut/Documents/cocos/ndk/android-ndk-r16b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/…/…/…/…/arm-linux-androideabi/bin/ld: error: treating warnings as errors
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/Users/dut/Desktop/test/test_fb_sdkbox/frameworks/runtime-src/proj.android/app/build/intermediates/ndkBuild/release/obj/local/armeabi-v7a/libcocos2djs.so] Error 1

I update plugins (2.4.0.2) version on staging server.

plz try:

sdkbox update --staging
# or
sdkbox import facebook --staging

Thanks,

it’s working, thanks @yinjimmy