Игра Cocos2D-x, только что из Play Store, даже не открывается

Я только что закончил свою первую игру cocos2d-x. Я тестировал его на своем GNexus 4.1 и других устройствах младше, включая планшеты. Однако при покупке и загрузке на Nexus 7 он даже не открывается. У меня 4.2, может в этом дело? Любая помощь будет оценена по достоинству. отчет о сбое:

java.lang.ExceptionInInitializerError
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library:     soinfo_relocate(linker.cpp:975): cannot locate symbol "__exidx_end" referenced by               "libgame.so"...
at java.lang.Runtime.loadLibrary(Runtime.java:371)
at java.lang.System.loadLibrary(System.java:535)
at com.penguinproductions.classiclightcycles.<clinit>(classiclightcycles.java:107)
... 15 more

person David Small    schedule 25.11.2012    source источник
comment
Я думаю, что Cocos2d-x не тестировался в Android › 4. Но компиляция с целью 3.0 должна работать.   -  person vgonisanz    schedule 26.11.2012
comment
@Piperoman Я тестировал на своем устройстве 4.1, и оно работало отлично. Я полагаю, что моя цель была 2.1 или 2.2, будет ли проблемой более низкая цель?   -  person David Small    schedule 26.11.2012
comment
Возможно нет. Попробуйте задать вопрос на официальном форуме: cocos2d-x.org/projects/cocos2d- x/boards/6, потому что это может быть ошибка.   -  person vgonisanz    schedule 26.11.2012
comment
Это не проблема кокоса, это проблема AndroidNDK 8, но я еще не понял этого - многие библиотеки С++, созданные с помощью r8, сталкиваются с этой проблемой в Android 4.2.   -  person Fenix Voltres    schedule 24.01.2013


Ответы (1)


Есть много приложений, которые страдают от этой ошибки. Это происходит на Android 4.2 с проектом, скомпилированным с использованием специального Android NDK - у меня это был r8d, но вы можете найти и людей с другими версиями с этой ошибкой. Найденный мной обходной путь упоминается здесь. Решение состоит в том, чтобы добавить следующие строки кода в любой из ваших .cpp файлов:

#ifdef __cplusplus
    extern "C" {
#endif

void __exidx_start() {}
void __exidx_end()   {}

#ifdef __cplusplus
    }
#endif

Для меня это сработало.

Но я думаю, вы должны быть начеку, потому что в будущих версиях NDK, когда они, наконец, исправят это, эти символы могут быть определены дважды, поэтому этот обходной путь фактически превратится в ошибку.

person Fenix Voltres    schedule 24.01.2013