Couldn't run JavaFX Port Application on Genymo

2019-07-31 19:21发布

问题:

I am having problem running my JavaFX Port Application on Genymotion. When I try to install it on the emulator. It says "Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]". So I go into flashing it with ARM Trnaslation. Finally I successfully installed my application on genymotion.

The problem is when I try to run the app, it says "Unfortunately Gluon has stopped".

The error log below.

07-24 13:36:57.283  1508  1508 I MultiDex: install
07-24 13:36:57.283  1508  1508 I MultiDex: MultiDexExtractor.load(/data/app/com.gluonapplication2-1.apk, false)
07-24 13:36:57.299   197   246 W genymotion_audio: out_write() limiting sleep time 46485 to 39909
07-24 13:36:57.315  1508  1508 I MultiDex: loading existing secondary dex files
07-24 13:36:57.315  1508  1508 I MultiDex: load found 1 secondary dex files
07-24 13:36:57.319  1508  1508 I MultiDex: install done
07-24 13:36:57.323  1508  1508 V FXActivity: Initializing JavaFX Platform, using 8.60.7-SNAPSHOT
07-24 13:36:57.331   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.335  1508  1508 D dalvikvm: Trying to load lib /data/app-lib/com.gluonapplication2-1/libactivity.so 0xa4fe3960
07-24 13:36:57.371  1508  1508 F libc    : Fatal signal 11 (SIGSEGV) at 0x000000b4 (code=1), thread 1508 (uonapplication2)
07-24 13:36:57.403   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.455   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.483   145   145 I DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-24 13:36:57.483   145   145 I DEBUG   : Build fingerprint: 'generic/vbox86p/vbox86p:4.4.4/KTU84P/eng.genymotion.20160609.162149:userdebug/test-keys'
07-24 13:36:57.483   145   145 I DEBUG   : Revision: '0'
07-24 13:36:57.483   145   145 I DEBUG   : pid: 1508, tid: 1508, name: uonapplication2  >>> com.gluonapplication2 <<<
07-24 13:36:57.483   145   145 I DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000000b4
07-24 13:36:57.607   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.663   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.723   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.783   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:57.919   145   145 I DEBUG   :     eax 0f861226  ebx 000019f0  ecx 94723d01  edx 00000000
07-24 13:36:57.919   145   145 I DEBUG   :     esi 00000000  edi b4e2e6bc
07-24 13:36:57.923   145   145 I DEBUG   :     xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000  xss 0000007b
07-24 13:36:57.923   145   145 I DEBUG   :     eip 945df751  ebp bf9353e8  esp bf9353c0  flags 00210246
07-24 13:36:57.923   145   145 I DEBUG   :
07-24 13:36:57.923   145   145 I DEBUG   : backtrace:
07-24 13:36:57.927   145   145 I DEBUG   :     #00  pc 000e8751  /system/lib/libhoudini.so
07-24 13:36:57.927   145   145 I DEBUG   :     #01  pc 000e66ea  /system/lib/libhoudini.so
07-24 13:36:57.927   145   145 I DEBUG   :     #02  pc 000e8aaa  /system/lib/libhoudini.so
07-24 13:36:57.931   145   145 I DEBUG   :     #03  pc 000bfcfc  /system/lib/libhoudini.so
07-24 13:36:57.931   145   145 I DEBUG   :     #04  pc 000e6cc2  /system/lib/libhoudini.so (dvm2hdInit+18)
07-24 13:36:57.935   145   145 I DEBUG   :     #05  pc 00176947  /system/lib/libdvm.so (houdini::hookDlopen(char const*, int, bool*)+343)
07-24 13:36:57.935   145   145 I DEBUG   :     #06  pc 0008bcff  /system/lib/libdvm.so (dvmLoadNativeCode(char const*, Object*, char**)+719)
07-24 13:36:57.935   145   145 I DEBUG   :     #07  pc 000ceaab  /system/lib/libdvm.so (Dalvik_java_lang_Runtime_nativeLoad(unsigned int const*, JValue*)+139)
07-24 13:36:57.939   145   145 I DEBUG   :     #08  pc 001775b8  /system/lib/libdvm.so
07-24 13:36:57.939   145   145 I DEBUG   :     #09  pc 00005bff  <unknown>
07-24 13:36:57.939   145   145 I DEBUG   :     #10  pc 0003b962  /system/lib/libdvm.so (dvmMterpStd(Thread*)+66)
07-24 13:36:57.939   145   145 I DEBUG   :     #11  pc 00037029  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+217)
07-24 13:36:57.939   145   145 I DEBUG   :     #12  pc 000bd027  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, char*)+759)
07-24 13:36:57.943   145   145 I DEBUG   :     #13  pc 000bd437  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+55)
07-24 13:36:57.943   145   145 I DEBUG   :     #14  pc 000dd8b2  /system/lib/libdvm.so (dvmInitClass+1458)
07-24 13:36:57.947   145   145 I DEBUG   :     #15  pc 000cd8d5  /system/lib/libdvm.so (Dalvik_java_lang_Class_newInstance(unsigned int const*, JValue*)+229)
07-24 13:36:57.947   145   145 I DEBUG   :     #16  pc 001775b8  /system/lib/libdvm.so
07-24 13:36:57.951   145   145 I DEBUG   :     #17  pc 00005ceb  <unknown>
07-24 13:36:57.951   145   145 I DEBUG   :     #18  pc 0003b962  /system/lib/libdvm.so (dvmMterpStd(Thread*)+66)
07-24 13:36:57.955   145   145 I DEBUG   :     #19  pc 00037029  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+217)
07-24 13:36:57.955   145   145 I DEBUG   :     #20  pc 000bc1c6  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+1750)
07-24 13:36:57.955   145   145 I DEBUG   :     #21  pc 000d1b20  /system/lib/libdvm.so (Dalvik_java_lang_reflect_Method_invokeNative(unsigned int const*, JValue*)+288)
07-24 13:36:57.959   145   145 I DEBUG   :     #22  pc 001775b8  /system/lib/libdvm.so
07-24 13:36:57.967   145   145 I DEBUG   :     #23  pc 00005eff  <unknown>
07-24 13:36:57.967   145   145 I DEBUG   :     #24  pc 0003b962  /system/lib/libdvm.so (dvmMterpStd(Thread*)+66)
07-24 13:36:57.971   145   145 I DEBUG   :     #25  pc 00037029  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+217)
07-24 13:36:57.971   145   145 I DEBUG   :     #26  pc 000bd027  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, char*)+759)
07-24 13:36:57.975   145   145 I DEBUG   :     #27  pc 0007879d  /system/lib/libdvm.so (CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+109)
07-24 13:36:57.975   145   145 I DEBUG   :     #28  pc 0005f50a  /system/lib/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+42)
07-24 13:36:57.979   145   145 I DEBUG   :     #29  pc 00060ca4  /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+884)
07-24 13:36:57.979   145   145 I DEBUG   :     #30  pc 00001017  /system/bin/app_process (main+567)
07-24 13:36:57.979   145   145 I DEBUG   :     #31  pc 0000d59c  /system/lib/libc.so (__libc_init+108)
07-24 13:36:57.983   145   145 I DEBUG   :
07-24 13:36:57.983   145   145 I DEBUG   : stack:
07-24 13:36:57.983   145   145 I DEBUG   :          bf935470  b7737000  /system/bin/linker
07-24 13:36:57.987   145   145 I DEBUG   :          bf935474  b4e35179  /system/lib/libdvm.so
07-24 13:36:57.991   145   145 I DEBUG   :          bf935478  b76a9689  /system/lib/libc.so (__system_property_get+9)
07-24 13:36:57.991   145   145 I DEBUG   :          bf93547c  b7711e58  /system/lib/libcutils.so
07-24 13:36:57.991   145   145 I DEBUG   :          bf935480  98dc7c38
07-24 13:36:57.995   145   145 I DEBUG   :          bf935484  948709c0
07-24 13:36:57.995   145   145 I DEBUG   :          bf935488  bf9354a8  [stack]
07-24 13:36:57.999   145   145 I DEBUG   :          bf93548c  945ddcc3  /system/lib/libhoudini.so (dvm2hdInit+19)
07-24 13:36:58.003   145   145 I DEBUG   :          bf935490  b4e3514d  /system/lib/libdvm.so
07-24 13:36:58.003   145   145 I DEBUG   :          bf935494  bf9354e0  [stack]
07-24 13:36:58.003   145   145 I DEBUG   :          bf935498  9dd686d8  /dev/ashmem/dalvik-LinearAlloc (deleted)
07-24 13:36:58.007   145   145 I DEBUG   :          bf93549c  b4e7bcb4  /system/lib/libdvm.so
07-24 13:36:58.007   145   145 I DEBUG   :          bf9354a0  b4e2e6bc  /system/lib/libdvm.so
07-24 13:36:58.007   145   145 I DEBUG   :          bf9354a4  b4e2e6bc  /system/lib/libdvm.so
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354a8  00000000
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354ac  b4e2b948  /system/lib/libdvm.so (houdini::hookDlopen(char const*, int, bool*)+344)
07-24 13:36:58.011   145   145 I DEBUG   :     #05  bf9354b0  bf9354d8  [stack]
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354b4  b4e35179  /system/lib/libdvm.so
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354b8  b4e2cb75  /system/lib/libdvm.so
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354bc  b4e7bcb4  /system/lib/libdvm.so
07-24 13:36:58.011   145   145 I DEBUG   :          bf9354c0  bf93550c  [stack]
07-24 13:36:58.015   145   145 I DEBUG   :          bf9354c4  9dd686d8  /dev/ashmem/dalvik-LinearAlloc (deleted)
07-24 13:36:58.019   145   145 I DEBUG   :          bf9354c8  b814af90  [heap]
07-24 13:36:58.023   145   145 I DEBUG   :          bf9354cc  bf9355ab  [stack]
07-24 13:36:58.023   145   145 I DEBUG   :          bf9354d0  bf93550c  [stack]
07-24 13:36:58.027   145   145 I DEBUG   :          bf9354d4  00000000
07-24 13:36:58.031   145   145 I DEBUG   :          bf9354d8  b770a1d0  /system/lib/libcutils.so (__android_log_print)
07-24 13:36:58.031   145   145 I DEBUG   :          bf9354dc  b4e2b7e0  /system/lib/libdvm.so (houdini::dvmGetMethodShorty(houdini::fake_Method const*))
07-24 13:36:58.035   145   145 I DEBUG   :          bf9354e0  00006e6f
07-24 13:36:58.035   145   145 I DEBUG   :          bf9354e4  00000000
07-24 13:36:58.035   145   145 I DEBUG   :          bf9354e8  ffffffff
07-24 13:36:58.039   145   145 I DEBUG   :          bf9354ec  00000000
07-24 13:36:58.039   145   145 I DEBUG   :          ........  ........
07-24 13:36:58.039   145   145 I DEBUG   :     #06  bf935560  b814af90  [heap]
07-24 13:36:58.047   145   145 I DEBUG   :          bf935564  00000001
07-24 13:36:58.047   145   145 I DEBUG   :          bf935568  bf9355ab  [stack]
07-24 13:36:58.047   145   145 I DEBUG   :          bf93556c  b4d40080  /system/lib/libdvm.so (hashcmpNameStr(void const*, void const*))
07-24 13:36:58.047   145   145 I DEBUG   :          bf935570  00000000
07-24 13:36:58.047   145   145 I DEBUG   :          bf935574  b4e44714  /system/lib/libdvm.so
07-24 13:36:58.047   145   145 I DEBUG   :          bf935578  00000018
07-24 13:36:58.047   145   145 I DEBUG   :          bf93557c  b772df2a  /system/bin/linker (__dl_pthread_mutex_unlock+154)
07-24 13:36:58.047   145   145 I DEBUG   :          bf935580  00000002
07-24 13:36:58.047   145   145 I DEBUG   :          bf935584  bf9355bc  [stack]
07-24 13:36:58.051   145   145 I DEBUG   :          bf935588  a4fe3960  /dev/ashmem/dalvik-heap (deleted)
07-24 13:36:58.051   145   145 I DEBUG   :          bf93558c  b76e4f01  /system/lib/libc.so
07-24 13:36:58.051   145   145 I DEBUG   :          bf935590  bf93561c  [stack]
07-24 13:36:58.051   145   145 I DEBUG   :          bf935594  b800deb0  [heap]
07-24 13:36:58.051   145   145 I DEBUG   :          bf935598  000006c9
07-24 13:36:58.051   145   145 I DEBUG   :          bf93559c  b765c455  /system/lib/libc.so (dlfree+885)
07-24 13:36:58.051   145   145 I DEBUG   :          ........  ........
07-24 13:36:58.051   145   145 I DEBUG   :     #07  bf935600  b814af90  [heap]
07-24 13:36:58.055   145   145 I DEBUG   :          bf935604  a4fe3960  /dev/ashmem/dalvik-heap (deleted)
07-24 13:36:58.055   145   145 I DEBUG   :          bf935608  bf93561c  [stack]
07-24 13:36:58.055   145   145 I DEBUG   :          bf93560c  b4e7bcb4  /system/lib/libdvm.so
07-24 13:36:58.055   145   145 I DEBUG   :          bf935610  9dad7bf0  /data/dalvik-cache/system@framework@core.jar@classes.dex
07-24 13:36:58.055   145   145 I DEBUG   :          bf935614  a4cb60e0  /dev/ashmem/dalvik-zygote (deleted)
07-24 13:36:58.055   145   145 I DEBUG   :          bf935618  b4d536c5  /system/lib/libdvm.so (dvmMarkCard(void const*)+5)
07-24 13:36:58.055   145   145 I DEBUG   :          bf93561c  00000000
07-24 13:36:58.055   145   145 I DEBUG   :          bf935620  a4ffdaf0  /dev/ashmem/dalvik-heap (deleted)
07-24 13:36:58.055   145   145 I DEBUG   :          bf935624  00000001
07-24 13:36:58.055   145   145 I DEBUG   :          bf935628  b4d48949  /system/lib/libdvm.so (dvmLockObject+9)
07-24 13:36:58.055   145   145 I DEBUG   :          bf93562c  9ed5dc00
07-24 13:36:58.055   145   145 I DEBUG   :          bf935630  9dae4aae  /data/dalvik-cache/system@framework@core.jar@classes.dex
07-24 13:36:58.055   145   145 I DEBUG   :          bf935634  9ed5dc20
07-24 13:36:58.055   145   145 I DEBUG   :          bf935638  bf9356b8  [stack]
07-24 13:36:58.059   145   145 I DEBUG   :          bf93563c  b4e2c5b9  /system/lib/libdvm.so
07-24 13:36:58.239   522   544 I BootReceiver: Copying /data/tombstones/tombstone_04 to DropBox (SYSTEM_TOMBSTONE)
07-24 13:36:58.255   522  1529 W ActivityManager:   Force finishing activity com.gluonapplication2/javafxports.android.FXActivity
07-24 13:36:58.263   196   196 D Zygote  : Process 1508 terminated by signal (11)
07-24 13:36:58.559   522  1529 I WindowManager: Screenshot max retries 4 of Token{52a6e170 ActivityRecord{52a6e0c0 u0 com.gluonapplication2/javafxports.android.FXActivity t4 f}} appWin=Window{5298eeac u0 Starting com.gluonapplication2} drawState=4
07-24 13:36:58.559   522  1529 W WindowManager: Screenshot failure taking screenshot for (1080x1920) to layer 21010
07-24 13:36:58.559   522  1529 W ActivityManager: Exception thrown during pause
07-24 13:36:58.559   522  1529 W ActivityManager: android.os.DeadObjectException
07-24 13:36:58.559   522  1529 W ActivityManager:       at android.os.BinderProxy.transact(Native Method)
07-24 13:36:58.559   522  1529 W ActivityManager:       at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:660)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:761)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2443)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2320)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2050)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:9548)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:9441)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:10086)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:9637)
07-24 13:36:58.559   522  1529 W ActivityManager:       at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
07-24 13:36:58.571   522   533 I ActivityManager: Process com.gluonapplication2 (pid 1508) has died.
07-24 13:36:58.739   719   719 W EGL_genymotion: eglSurfaceAttrib not implemented
07-24 13:36:59.335   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:59.719   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:36:59.959   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:37:00.071   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:37:00.131   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:37:00.191   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:37:02.507   522   567 D MobileDataStateTracker: default: setPolicyDataEnable(enabled=true)
07-24 13:37:02.599   522   534 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@52c2b9f8 attribute=null, token = android.os.BinderProxy@528d3c9c
07-24 13:37:02.615   197   246 W genymotion_audio: out_write() limiting sleep time 115736 to 39909
07-24 13:37:02.655   197   246 W genymotion_audio: out_write() limiting sleep time 101655 to 39909
07-24 13:37:02.695   197   246 W genymotion_audio: out_write() limiting sleep time 87596 to 39909
07-24 13:37:02.735   197   246 W genymotion_audio: out_write() limiting sleep time 77324 to 39909
07-24 13:37:02.779   197   246 W genymotion_audio: out_write() limiting sleep time 62335 to 39909
07-24 13:37:02.819   197   246 W genymotion_audio: out_write() limiting sleep time 46485 to 39909
07-24 13:37:02.891   197   246 W genymotion_audio: out_write() limiting sleep time 51201 to 39909

Can you help me with this? I am a total newbie in JavaFX Port.

回答1:

I've installed Genymotion and the ARM translation, and I can reproduce the error.

If you set on Genymotion->Settings->ADB 'use custom Android SDK tools', and provide the path to your android sdk, then you can open a console window, go to Android/sdk/platform-tools and when the emulator running, type: adb logcat -v threadtime.

You will see the exception when launching the Gluon application:

07-23 07:36:17.191  1713  1713 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.gluonhq.fiftystates-1/lib/arm/libactivity.so" has unexpected e_machine: 40
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at java.lang.Runtime.loadLibrary(Runtime.java:372)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at java.lang.System.loadLibrary(System.java:1076)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at javafxports.android.FXActivity.<clinit>(FXActivity.java:116)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at java.lang.Class.newInstance(Native Method)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.ActivityThread.-wrap11(ActivityThread.java)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
07-23 07:36:17.191  1713  1713 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

This error: UnsatisfiedLinkError: dlopen failed: "/data/app/com.gluonhq.fiftystates-1/lib/arm/libactivity.so" has unexpected e_machine: 40 has been reported several times, as a bug in the arm translation.

Basically it means there are no x86 libraries, and the translation from arm libraries has failed.

If you want to run the app in an emulator you may try BlueStacks. Once you have installed it, you can double click on your apk and it will be available on BlueStacks. Then you can run it.

If for any reason the app crashes, you can run adb logcat as well to find out about any possible exception. I've noticed that apps that work fine on mobile fail easily on the emulator.

So the best solution is running and testing your apps in a real device.