title: Problems implementing the new GCM Client for Android
body: <p>I'm trying to implement the new <code>GCM Client</code> on Android following the guidelines from Google (<a href="https://developers.google.com/cloud-messaging/android/client" rel="noreferrer">https://developers.google.com/cloud-messaging/android/client</a>).
  I'm receiving slightly different errors for two different devices. I noticed that I receive NoSuchMethodError for method getNoBackupFilesDir for both the devices.<br>
  This is the logcat for an Android 4.2.2:</p>
  
  <pre><code>06-08 09:01:09.920: I/dalvikvm(9138): Could not find methodandroid.app.Notification$Builder.setLocalOnly, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
  06-08 09:01:09.920: W/dalvikvm(9138): VFY: unable to resolve virtual method 273: Landroid/app/Notification$Builder;.setLocalOnly (Z)Landroid/app/Notification$Builder;
  06-08 09:01:09.920: D/dalvikvm(9138): VFY: replacing opcode 0x6e at 0x00c2
  06-08 09:01:09.920: I/dalvikvm(9138): DexOpt: access denied from Lcom/google/android/gms/common/GooglePlayServicesUtil; to field Landroid/app/Notification;.extras
  06-08 09:01:09.920: W/dalvikvm(9138): VFY: unable to resolve instance field 12
  06-08 09:01:09.920: D/dalvikvm(9138): VFY: replacing opcode 0x54 at 0x00e1
  06-08 09:01:09.920: E/dalvikvm(9138): Could not find class 'android.app.AppOpsManager', referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
  06-08 09:01:09.920: W/dalvikvm(9138): VFY: unable to resolve check-cast 25 (Landroid/app/AppOpsManager;) in Lcom/google/android/gms/common/GooglePlayServicesUtil;
  06-08 09:01:09.920: D/dalvikvm(9138): VFY: replacing opcode 0x1f at 0x000e
  06-08 09:01:09.920: I/dalvikvm(9138): Could not find method android.content.pm.PackageManager.getPackageInstaller, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zzh
  06-08 09:01:09.920: W/dalvikvm(9138): VFY: unable to resolve virtual method 528: Landroid/content/pm/PackageManager;.getPackageInstaller ()Landroid/content/pm/PackageInstaller;
  06-08 09:01:09.920: D/dalvikvm(9138): VFY: replacing opcode 0x6e at 0x000b
  06-08 09:01:09.950: I/dalvikvm(9138): Could not find method android.support.v4.content.ContextCompat.getNoBackupFilesDir, referenced from method com.google.android.gms.iid.zzd.zzde
  06-08 09:01:09.950: W/dalvikvm(9138): VFY: unable to resolve virtual method 2080: Landroid/support/v4/content/ContextCompat;.getNoBackupFilesDir (Landroid/content/Context;)Ljava/io/File;
  06-08 09:01:09.950: D/dalvikvm(9138): VFY: replacing opcode 0x6e at 0x0007
  06-08 09:01:09.950: W/dalvikvm(9138): threadid=11: thread exiting with uncaught exception (group=0x4174c930)
  06-08 09:01:09.960: E/AndroidRuntime(9138): FATAL EXCEPTION: AsyncTask #1
  06-08 09:01:09.960: E/AndroidRuntime(9138): java.lang.RuntimeException: An error occured while executing doInBackground()
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.lang.Thread.run(Thread.java:856)
  06-08 09:01:09.960: E/AndroidRuntime(9138): Caused by: java.lang.NoSuchMethodError: android.support.v4.content.ContextCompat.getNoBackupFilesDir
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.google.android.gms.iid.zzd.zzde(Unknown Source)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.google.android.gms.iid.zzd.&lt;init&gt;(Unknown Source)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.google.android.gms.iid.zzd.&lt;init&gt;(Unknown Source)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.example.MainActivity$1.doInBackground(MainActivity.java:113)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at com.example.MainActivity$1.doInBackground(MainActivity.java:1)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
  06-08 09:01:09.960: E/AndroidRuntime(9138):     ... 4 more
  </code></pre>
  
  <p>And this is the logcat for an Android 5.1.1:</p>
  
  <pre><code>06-08 09:06:49.786: E/AndroidRuntime(2852): FATAL EXCEPTION: AsyncTask #1
  06-08 09:06:49.786: E/AndroidRuntime(2852): Process: com.example, PID: 2852
  06-08 09:06:49.786: E/AndroidRuntime(2852): java.lang.RuntimeException: An error occured while executing doInBackground()
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at android.os.AsyncTask$3.done(AsyncTask.java:304)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.lang.Thread.run(Thread.java:818)
  06-08 09:06:49.786: E/AndroidRuntime(2852): Caused by: java.lang.NoSuchMethodError: No virtual method getNoBackupFilesDir(Landroid/content/Context;)Ljava/io/File; in class Landroid/support/v4/content/ContextCompat; or its super classes (declaration of 'android.support.v4.content.ContextCompat' appears in /data/app/com.example-1/base.apk)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at com.google.android.gms.iid.zzd.zzde(Unknown Source)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at com.google.android.gms.iid.zzd.&lt;init&gt;(Unknown Source)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at com.google.android.gms.iid.zzd.&lt;init&gt;(Unknown Source)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at it.abgsys.htms.MainActivity$1.doInBackground(MainActivity.java:113)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at it.abgsys.htms.MainActivity$1.doInBackground(MainActivity.java:1)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at android.os.AsyncTask$2.call(AsyncTask.java:292)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
  06-08 09:06:49.786: E/AndroidRuntime(2852):     ... 4 more
  </code></pre>
  
  <p>At line 113 I have this:</p>
  
  <pre><code>InstanceID instanceID = InstanceID.getInstance(applicationContext);
  </code></pre>
  
  <p>Used here:</p>
  
  <pre><code>// AsyncTask to register Device in GCM Server
  private void registerInBackground() {
      new AsyncTask&lt;Void, Void, String&gt;() {
          @Override
          protected String doInBackground(Void... params) {
              String msg = "";
  
              InstanceID instanceID = InstanceID.getInstance(applicationContext);
              try {
                  regId = instanceID.getToken(GCM_SENDER_ID,
                          GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
              return msg;
          }
  
          @Override
          protected void onPostExecute(String msg) {
              if (!TextUtils.isEmpty(regId)) {
  
                  Toast.makeText(
                          applicationContext,
                          "Registered with GCM Server successfully.\n\n"
                                  + msg, Toast.LENGTH_SHORT).show();
                  Log.e(TAG, "Registered with GCM Server successfully. RegID: " + regId);
  
              } else { 
                  Toast.makeText(
                          applicationContext,
                          "Reg ID Creation Failed.\n\nEither you haven't enabled Internet or GCM server is busy right now. "
                          + "Make sure you enabled Internet and try registering again after some time."
                                  + msg, Toast.LENGTH_LONG).show();
                  Log.e(TAG, "Reg ID Creation Failed!!!");
              }
          }
      }.execute(null, null, null);
  }
  </code></pre>
  
  <p>I correctly imported the <code>Google Play Services</code> library as described in the documentation.(<a href="https://developers.google.com/android/guides/setup" rel="noreferrer">https://developers.google.com/android/guides/setup</a>) </p>
  
  <p>Has anyone encountered this errors? How can I resolve this?</p>
  
  <p>Development environment used: Eclipse Kepler SR2 with ADT<br>
  If you need additional info please comment.</p>