Android AIDL服务的java.lang.VerifyError

Android AIDL服务的java.lang.VerifyError,android,service,aidl,verifyerror,csip-simple,Android,Service,Aidl,Verifyerror,Csip Simple,我正在开发一个与另一个应用程序(称为CSipSimple)中的外部服务通信的应用程序。我可以绑定到服务: ServiceConnection mConnection = new ServiceConnection(){ @Override public void onServiceConnected(ComponentName comp, IBinder svc){ ISipService mSvc = ISipService.Stub.asInterface(s

我正在开发一个与另一个应用程序(称为CSipSimple)中的外部服务通信的应用程序。我可以绑定到服务:

ServiceConnection mConnection = new ServiceConnection(){
    @Override
    public void onServiceConnected(ComponentName comp, IBinder svc){
        ISipService mSvc = ISipService.Stub.asInterface(svc); // Exception here
        ...
    }
    ...
}

Intent i = new Intent("com.csipsimple.service.SipService");
getApplicationContext().bindService(i, mConnection, BIND_IMPORTANT)
在指定的行上引发异常。我四处搜索并尝试了以下所有方法,但均无效:

  • 将AIDL文件添加到项目的源文件夹
  • 将其他应用程序(CSipSimple)添加为必需的项目
  • 勾选订单/导出列表中的所有条目
  • 清理和重建两个应用程序
将生成以下错误:

06-04 12:01:25.320: W/dalvikvm(8631): VFY: unable to resolve virtual method 4276: Lcom/csipsimple/api/SipCallSession;.writeToParcel (Landroid/os/Parcel;I)V
06-04 12:01:25.320: W/dalvikvm(8631): VFY: unable to find class referenced in signature ([Lcom/csipsimple/api/SipCallSession;)
06-04 12:01:25.320: W/dalvikvm(8631): VFY: [Ljava/lang/Object; is not instance of [Landroid/os/Parcelable;
06-04 12:01:25.320: W/dalvikvm(8631): VFY: bad arg 1 (into [Landroid/os/Parcelable;)
06-04 12:01:25.320: W/dalvikvm(8631): VFY:  rejecting call to Landroid/os/Parcel;.writeTypedArray ([Landroid/os/Parcelable;I)V
06-04 12:01:25.320: W/dalvikvm(8631): VFY:  rejecting opcode 0x6e at 0x01dc
06-04 12:01:25.320: W/dalvikvm(8631): VFY:  rejected Lcom/csipsimple/api/ISipService$Stub;.onTransact (ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
06-04 12:01:25.320: W/dalvikvm(8631): Verifier rejected class Lcom/csipsimple/api/ISipService$Stub;
06-04 12:01:25.320: W/dalvikvm(8631): threadid=1: thread exiting with uncaught exception (group=0x4191d930)
06-04 12:01:25.328: E/AndroidRuntime(8631): FATAL EXCEPTION: main
06-04 12:01:25.328: E/AndroidRuntime(8631): java.lang.VerifyError: com/csipsimple/api/ISipService$Stub
06-04 12:01:25.328: E/AndroidRuntime(8631):     at com.example.sipgather.MainActivity$1.onServiceConnected(MainActivity.java:37)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.os.Handler.handleCallback(Handler.java:725)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.os.Looper.loop(Looper.java:137)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at android.app.ActivityThread.main(ActivityThread.java:5041)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at java.lang.reflect.Method.invokeNative(Native Method)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at java.lang.reflect.Method.invoke(Method.java:511)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-04 12:01:25.328: E/AndroidRuntime(8631):     at dalvik.system.NativeStart.main(Native Method)

看起来它找不到一些必需的类/方法,但我已将所有的AIDL文件添加到我的项目中。任何帮助都将不胜感激

我可以通过将
SipHome
制作成一个库来解决这个问题,并将它从
项目属性->Android->library
对话框包含在我的应用程序中。

看起来像
ISipService.Stub.onTransact(Parcel,Parcel,int)
正在将一个
对象[]
传递到
Parcel.WriteyPedarray(Parcelable[])
。缺少方法和类通常会导致运行时失败(“没有这样的方法”),而不是立即验证失败,因此前两条失败消息可能不是致命的。