使用multidex时后台服务上的socket.io的NoClassDefFoundError

时间:2016-01-06 22:15:37

标签: android socket.io android-service multidex

我正在尝试创建一个后台应用程序关闭时运行的后台服务。此服务的目的是连接到nodejs服务器,每当发生事件时(通过socket.io),它都会通知用户。 但是,当我启动我的服务时,我的应用程序崩溃,我收到以下错误

01-06 16:52:14.239 2304-2304/? D/dalvikvm: Late-enabling CheckJNI
01-06 16:52:14.255 2304-2310/? D/dalvikvm: Debugger has detached; object registry had 1 entries
01-06 16:52:14.267 2304-2318/? W/SharedPreferencesImpl: Attempt to read     preferences file /data/data/com.esprit.redcrescentapp/shared_prefs/RedCrecent.xml without permission
01-06 16:52:14.267 2304-2304/? D/Service: Created
01-06 16:52:14.267 2304-2304/? I/dalvikvm: Could not find method io.socket.client.IO.socket, referenced from method com.esprit.redcrescentapp.SocketHandler.<init>
01-06 16:52:14.267 2304-2304/? W/dalvikvm: VFY: unable to resolve static method 63105: Lio/socket/client/IO;.socket (Ljava/lang/String;)Lio/socket/client/Socket;
01-06 16:52:14.267 2304-2304/? D/dalvikvm: VFY: replacing opcode 0x71 at 0x0005
01-06 16:52:14.267 2304-2304/? I/dalvikvm: Could not find method io.socket.client.IO.socket, referenced from method com.esprit.redcrescentapp.SocketHandler.getSocketInstance
01-06 16:52:14.267 2304-2304/? W/dalvikvm: VFY: unable to resolve static method 63105: Lio/socket/client/IO;.socket (Ljava/lang/String;)Lio/socket/client/Socket;
01-06 16:52:14.267 2304-2304/? D/dalvikvm: VFY: replacing opcode 0x71 at 0x0006
01-06 16:52:14.267 2304-2304/? D/AndroidRuntime: Shutting down VM
01-06 16:52:14.267 2304-2304/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4d0eb20)
01-06 16:52:14.267 2304-2304/? E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: com.esprit.redcrescentapp, PID: 2304
                                             java.lang.NoClassDefFoundError: io.socket.client.IO
                                                 at com.esprit.redcrescentapp.SocketHandler.getSocketInstance(SocketHandler.java:100)
                                                 at com.esprit.redcrescentapp.MyService.onCreate(MyService.java:74)
                                                 at android.app.ActivityThread.handleCreateService(ActivityThread.java:2558)
                                                 at android.app.ActivityThread.access$1800(ActivityThread.java:135)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:136)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                 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:785)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                 at dalvik.system.NativeStart.main(Native Method)

我认为抛出此异常是因为我没有在MyService类中添加 MultiDex.install(),而是在我尝试添加它时另一个异常

01-06 17:05:43.499 7677-7677/? D/dalvikvm: Late-enabling CheckJNI
01-06 17:05:43.519 7677-7683/? D/dalvikvm: Debugger has detached; object registry had 1 entries
01-06 17:05:43.527 7677-7677/? I/MultiDex: VM with version 1.6.0 does not have multidex support
01-06 17:05:43.527 7677-7677/? I/MultiDex: install
01-06 17:05:43.527 7677-7677/? I/MultiDex: MultiDexExtractor.load(/data/app/com.esprit.redcrescentapp-2.apk, false)
01-06 17:05:43.531 7677-7690/? W/SharedPreferencesImpl: Attempt to read preferences file /data/data/com.esprit.redcrescentapp/shared_prefs/multidex.version.xml without permission
01-06 17:05:43.531 7677-7677/? I/MultiDex: Detected that extraction must be performed.
01-06 17:05:43.531 7677-7677/? E/MultiDex: Failed to create dir /data/data/com.esprit.redcrescentapp/code_cache/secondary-dexes. parent file is a dir true, a file false, exists true, readable false, writable false
01-06 17:05:43.531 7677-7677/? E/MultiDex: Multidex installation failure
                                       java.io.IOException: Failed to create cache directory /data/data/com.esprit.redcrescentapp/code_cache/secondary-dexes
                                           at android.support.multidex.MultiDexExtractor.mkdirChecked(MultiDexExtractor.java:301)
                                           at android.support.multidex.MultiDexExtractor.prepareDexDir(MultiDexExtractor.java:261)
                                           at android.support.multidex.MultiDexExtractor.performExtractions(MultiDexExtractor.java:170)
                                           at android.support.multidex.MultiDexExtractor.load(MultiDexExtractor.java:102)
                                           at android.support.multidex.MultiDex.install(MultiDex.java:159)
                                           at com.esprit.redcrescentapp.MyService.attachBaseContext(MyService.java:217)
                                           at android.app.Service.attach(Service.java:694)
                                           at android.app.ActivityThread.handleCreateService(ActivityThread.java:2556)
                                           at android.app.ActivityThread.access$1800(ActivityThread.java:135)
                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                           at android.os.Looper.loop(Looper.java:136)
                                           at android.app.ActivityThread.main(ActivityThread.java:5001)
                                           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:785)
                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                           at dalvik.system.NativeStart.main(Native Method)
01-06 17:05:43.531 7677-7677/? D/AndroidRuntime: Shutting down VM
01-06 17:05:43.531 7677-7677/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4d0eb20)
01-06 17:05:43.531 7677-7677/? E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: com.esprit.redcrescentapp, PID: 7677
                                             java.lang.RuntimeException: Unable to create service com.esprit.redcrescentapp.MyService: java.lang.RuntimeException: Multi dex installation failed (Failed to create cache directory /data/data/com.esprit.redcrescentapp/code_cache/secondary-dexes).
                                                 at android.app.ActivityThread.handleCreateService(ActivityThread.java:2568)
                                                 at android.app.ActivityThread.access$1800(ActivityThread.java:135)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:136)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5001)
                                                 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:785)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                                                 at dalvik.system.NativeStart.main(Native Method)
                                              Caused by: java.lang.RuntimeException: Multi dex installation failed (Failed to create cache directory /data/data/com.esprit.redcrescentapp/code_cache/secondary-dexes).
                                                 at android.support.multidex.MultiDex.install(MultiDex.java:178)
                                                 at com.esprit.redcrescentapp.MyService.attachBaseContext(MyService.java:217)
                                                 at android.app.Service.attach(Service.java:694)
                                                 at android.app.ActivityThread.handleCreateService(ActivityThread.java:2556)
                                                 at android.app.ActivityThread.access$1800(ActivityThread.java:135) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:136) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:5001) 
                                                 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:785) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                                                 at dalvik.system.NativeStart.main(Native Method) 

1 个答案:

答案 0 :(得分:0)

在我的清单中我有

<service
android:enabled="true"
android:isolatedProcess="true" 
/>

一旦我删除了enabled和isolatedProcess就可以了