LoginSignup
4
4

More than 5 years have passed since last update.

[cocos2d-x]アプリ起動時に落ちる(Android)

Posted at

Env

  • OSX 10.11.3
  • Android 4.4.4(実機)
  • cocos2d-x 3.13
  • Android SDK tools 25.1.7
  • Android NDK r10d
  • apache ANT 1.9.7
  • JDK 1.8.0_102

Ref

http://stackoverflow.com/questions/28740315/android-ndk-getting-java-lang-unsatisfiedlinkerror-dlopen-failed-cannot-loca
http://stackoverflow.com/questions/15872254/android-ndk-warning-app-platform-android-9-is-larger-than-androidminsdkversio
https://github.com/cocos2d/cocos2d-js/issues/631

Problems

コンパイルしたapkを実機にインストールして実行すると...

問題が発生したため、${appname}を終了します

というダイアログが出て終了する

エラーログはこんな感じ

...
E/dalvikvm(19125): dlopen("/data/app-lib/org.cocos2dx.GameBase-2/libcocos2dlua.so") failed: dlopen failed: cannot locate symbol "signal" referenced by "libcocos2dlua.so"...
D/AndroidRuntime(19125): Shutting down VM
W/dalvikvm(19125): threadid=1: thread exiting with uncaught exception (group=0x41668d58)
E/AndroidRuntime(19125): FATAL EXCEPTION: main
E/AndroidRuntime(19125): Process: org.cocos2dx.GameBase, PID: 19125
E/AndroidRuntime(19125): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "signal" referenced by "libcocos2dlua.so"...
E/AndroidRuntime(19125):        at java.lang.Runtime.loadLibrary(Runtime.java:364)
E/AndroidRuntime(19125):        at java.lang.System.loadLibrary(System.java:526)
E/AndroidRuntime(19125):        at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:248)
E/AndroidRuntime(19125):        at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:264)
E/AndroidRuntime(19125):        at android.app.Activity.performCreate(Activity.java:5245)
E/AndroidRuntime(19125):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(19125):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2179)
E/AndroidRuntime(19125):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2292)
E/AndroidRuntime(19125):        at android.app.ActivityThread.access$800(ActivityThread.java:149)
E/AndroidRuntime(19125):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
E/AndroidRuntime(19125):        at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(19125):        at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(19125):        at android.app.ActivityThread.main(ActivityThread.java:5265)
E/AndroidRuntime(19125):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(19125):        at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(19125):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
E/AndroidRuntime(19125):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:639)
E/AndroidRuntime(19125):        at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager(  860):   Force finishing activity org.cocos2dx.GameBase/org.cocos2dx.lua.AppActivity
I/ActivityManager(  860): Config changes=480 {1.0 440mcc20mnc ja_JP ldltr sw360dp w360dp h566dp 240dpi nrml port finger -keyb/v/h -nav/h s.26}
I/Choreographer( 1423): Skipped 32 frames!  The application may be doing too much work on its main thread.
I/InputReader(  860): Reconfiguring input devices.  changes=0x00000004
I/InputReader(  860): Device reconfigured: id=7, name='cyttsp5_mt', size 540x960, orientation 0, mode 1, display id 0
W/ContextImpl(  860): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1139 com.android.server.am.AppErrorDialog.<init>:114 com.android.server.am.ActivityManagerService$2.handleMessage:1211 android.os.Handler.dispatchMessage:102 android.os.Looper.loop:136
...

さらによく見るとこんな感じのワーニングがndk-build実行時に出てた

Android NDK: WARNING: APP_PLATFORM android-21 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml

Solutions

Application.mkに以下を追記する

Application.mk
APP_PLATFORM := android-9

すると、今度はコンパイル時に以下のエラーが発生する

[armeabi] Compile++ thumb: cocos2dxandroid_static <= Java_org_cocos2dx_lib_Cocos2dxBitmap.cpp
/Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//platform/android/javaactivity-android.cpp: In function 'void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*, jobject, jint, jint)':
/Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//platform/android/javaactivity-android.cpp:101:34: warning: 'void cocos2d::DrawPrimitives::init()' is deprecated (declared at /Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//platform/android/../../2d/CCDrawingPrimitives.h:88) [-Wdeprecated-declarations]
         cocos2d::DrawPrimitives::init();
                                  ^
/Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//platform/android/javaactivity-android.cpp:101:39: warning: 'void cocos2d::DrawPrimitives::init()' is deprecated (declared at /Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android/../../cocos2d-x/cocos//platform/android/../../2d/CCDrawingPrimitives.h:88) [-Wdeprecated-declarations]
         cocos2d::DrawPrimitives::init();
                                       ^
[armeabi] Compile++ thumb: cocos2dxandroid_static <= Java_org_cocos2dx_lib_Cocos2dxHelper.cpp
[armeabi] Compile++ thumb: cocos2dxandroid_static <= Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp
[armeabi] Compile++ thumb: cocos2dxandroid_static <= JniHelper.cpp
make: *** No rule to make target `/Users/tanishi/Library/Android/ndk/sources/android/cpufeatures/cpu-features.c', needed by `obj/local/armeabi/objs-debug/cpufeatures/cpu-features.o'.  Stop.
make: *** Waiting for unfinished jobs....
[armeabi] Compile++ thumb: cocos2dxandroid_static <= TouchesJni.cpp
make: Leaving directory `/Users/tanishi/Documents/GameBase/frameworks/runtime-src/proj.android'
Error running command, return code: 2.

cpkfeaturesのオブジェクトファイルを削除する

$ find . -name cpu-features.o* | rm -f

これでようやくコンパイルが通って起動できた

Screenshot_2016-09-10-23-16-16.png

Impressions

これって結構クリティカルなバグだよな...
もしかして困ってるの俺だけなのか?

解決に半日以上かかったけど、
stackoverflowさんはやっぱり神だわ

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4