title: SecurityException: Binder invocation to an incorrect interface using in-app billing
body: <p>I'm getting a SecurityException when attempting to use the in-app billing library that Google offers. Here is the full exception:</p>
  
  <pre><code>07-05 15:56:47.783  26481-26481/com.andrewq.planets E/AndroidRuntime﹕ FATAL EXCEPTION: main
      Process: com.andrewq.planets, PID: 26481
      java.lang.SecurityException: Binder invocation to an incorrect interface
              at android.os.Parcel.readException(Parcel.java:1465)
              at android.os.Parcel.readException(Parcel.java:1419)
              at billing.IInAppBillingService$Stub$Proxy.isBillingSupported(IInAppBillingService.java:208)
              at com.android.vending.billing.IabHelper$1.onServiceConnected(IabHelper.java:227)
              at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101)
              at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118)
              at android.os.Handler.handleCallback(Handler.java:733)
              at android.os.Handler.dispatchMessage(Handler.java:95)
              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)
  </code></pre>
  
  <p>Here is the IabHelper.java method with line 227:</p>
  
  <pre><code>    @Override
      public void onServiceConnected(ComponentName name, IBinder service) {
          if (mDisposed) return;
          logDebug("Billing service connected.");
          mService = IInAppBillingService.Stub.asInterface(service);
          String packageName = mContext.getPackageName();
          try {
              logDebug("Checking for in-app billing 3 support.");
  
              // check for in-app billing v3 support
              //**LINE 227**
              int response = mService.isBillingSupported(3, packageName, ITEM_TYPE_INAPP);
              if (response != BILLING_RESPONSE_RESULT_OK) {
                  if (listener != null) listener.onIabSetupFinished(new IabResult(response,
                                      "Error checking for billing v3 support."));
  
                  // if in-app purchases aren't supported, neither are subscriptions.
                  mSubscriptionsSupported = false;
                  return; 
              }
              logDebug("In-app billing version 3 supported for " + packageName);
  
              // check for v3 subscriptions support
              response = mService.isBillingSupported(3, packageName, ITEM_TYPE_SUBS);
              if (response == BILLING_RESPONSE_RESULT_OK) {
                  logDebug("Subscriptions AVAILABLE.");
                  mSubscriptionsSupported = true;
              } else {
                  logDebug("Subscriptions NOT AVAILABLE. Response: " + response);
              }
  
              mSetupDone = true;
          } catch (RemoteException e) {
              if (listener != null) {
                  listener.onIabSetupFinished(new IabResult(IABHELPER_REMOTE_EXCEPTION,
                                      "RemoteException while setting up in-app billing."));
              }
              e.printStackTrace();
              return;
          }
  
          if (listener != null) {
              listener.onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_OK, "Setup successful."));
          }
      }
  };
  </code></pre>
  
  <p>And finally, here is the IInAppBillingService.java file where line 208 is:</p>
  
  <pre><code>@Override public int isBillingSupported(int apiVersion, java.lang.String packageName, java.lang.String type) throws android.os.RemoteException
  {
      android.os.Parcel _data = android.os.Parcel.obtain();
      android.os.Parcel _reply = android.os.Parcel.obtain();
      int _result;
      try {
          _data.writeInterfaceToken(DESCRIPTOR);
          _data.writeInt(apiVersion);
          _data.writeString(packageName);
          _data.writeString(type);
          mRemote.transact(Stub.TRANSACTION_isBillingSupported, _data, _reply, 0);
          //**LINE 208**
          _reply.readException();
          _result = _reply.readInt();
      }
      finally {
          _reply.recycle();
          _data.recycle();
      }
      return _result;
  }
  </code></pre>
  
  <p>Now this happens when I first launch my app. I got the exception after attaching a debugger to the process.</p>