title: The Google Play services resources were not found - Push Notifications
body: <p>I'm following the Google Tutorial to install <strong>Push Notification</strong> on Android.
  I'm using <strong>Google Play Services Module</strong> because the Google Cloud Messaging was recently <em>deprecated</em>.</p>
  
  <p>Tutorial : <a href="http://developer.android.com/google/gcm/client.html" rel="nofollow noreferrer">Google Cloud Messaging - Google Play Services</a></p>
  
  <p>But when I launch the app I have this errors :</p>
  
  <pre><code>11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1816 (common_google_play_services_install_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1812 (common_google_play_services_enable_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1826 (common_google_play_services_update_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.119  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1823 (common_google_play_services_unsupported_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1820 (common_google_play_services_network_error_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1818 (common_google_play_services_invalid_account_title) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1813 (common_google_play_services_install_button) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1810 (common_google_play_services_enable_button) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1824 (common_google_play_services_update_button) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1815 (common_google_play_services_install_text_tablet) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1814 (common_google_play_services_install_text_phone) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1811 (common_google_play_services_enable_text) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1825 (common_google_play_services_update_text) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1822 (common_google_play_services_unsupported_text) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1819 (common_google_play_services_network_error_text) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1817 (common_google_play_services_invalid_account_text) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.129  20097-20097/com.thedjnivek.android.emarchespublics W/dalvikvm﹕ VFY: unable to resolve static field 1821 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;
  11-06 13:37:30.139  20097-20097/com.thedjnivek.android.emarchespublics E/GooglePlayServicesUtil﹕ The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
  11-06 13:37:30.220  20097-20097/com.thedjnivek.android.emarchespublics E/GooglePlayServicesUtil﹕ The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.
  </code></pre>
  
  <p>You can see here my <strong>source code</strong></p>
  
  <pre><code>//basic import ...
  
  import com.google.android.gms.common.ConnectionResult;
  import com.google.android.gms.common.GooglePlayServicesUtil;
  import com.google.android.gms.gcm.GoogleCloudMessaging;
  
  public class AppMainTabActivity extends FragmentActivity {
  
      public static final String EXTRA_MESSAGE = "message";
      public static final String PROPERTY_REG_ID = "registration_id";
      private static final String PROPERTY_APP_VERSION = "appVersion";
      private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
  
      /**
       * Substitute you own sender ID here. This is the project number you got
       * from the API Console, as described in "Getting Started."
       */
      String SENDER_ID = "7984****78";
  
      /**
       * Tag used on log messages.
       */
      static final String TAG = "GCMDemo";
  
      TextView mDisplay;
      GoogleCloudMessaging gcm;
      AtomicInteger msgId = new AtomicInteger();
      SharedPreferences prefs;
      Context context;
  
      String regid;
  
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          setContentView(R.layout.activity_main);
  
          context = getApplicationContext();
  
          // Check device for Play Services APK. If check succeeds, proceed with
          //  GCM registration.
          if (checkPlayServices()) {
              gcm = GoogleCloudMessaging.getInstance(this);
              regid = getRegistrationId(context);
  
              if (regid.isEmpty()) {
                  registerInBackground();
              }
          } else {
              Log.i(TAG, "No valid Google Play Services APK found.");
          }
      }
  
      // You need to do the Play Services APK check here too.
      @Override
      protected void onResume() {
          super.onResume();
          checkPlayServices();
      }
  
      /**
       * Check the device to make sure it has the Google Play Services APK. If
       * it doesn't, display a dialog that allows users to download the APK from
       * the Google Play Store or enable it in the device's system settings.
       */
      private boolean checkPlayServices() {
          int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
          if (resultCode != ConnectionResult.SUCCESS) {
              if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
                  GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                          PLAY_SERVICES_RESOLUTION_REQUEST).show();
              } else {
                  Log.i(TAG, "This device is not supported.");
                  finish();
              }
              return false;
          }
          return true;
      }
  
      /**
       * Gets the current registration ID for application on GCM service.
       * &lt;p&gt;
       * If result is empty, the app needs to register.
       *
       * @return registration ID, or empty string if there is no existing
       *         registration ID.
       */
      private String getRegistrationId(Context context) {
          final SharedPreferences prefs = getGCMPreferences(context);
          String registrationId = prefs.getString(PROPERTY_REG_ID, "");
          if (registrationId.isEmpty()) {
              Log.i(TAG, "Registration not found.");
              return "";
          }
          // Check if app was updated; if so, it must clear the registration ID
          // since the existing regID is not guaranteed to work with the new
          // app version.
          int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
          int currentVersion = getAppVersion(context);
          if (registeredVersion != currentVersion) {
              Log.i(TAG, "App version changed.");
              return "";
          }
          return registrationId;
      }
  
      /**
       * @return Application's {@code SharedPreferences}.
       */
      private SharedPreferences getGCMPreferences(Context context) {
          // This sample app persists the registration ID in shared preferences, but
          // how you store the regID in your app is up to you.
          return getSharedPreferences(AppMainTabActivity.class.getSimpleName(),
                  Context.MODE_PRIVATE);
      }
  
      /**
       * @return Application's version code from the {@code PackageManager}.
       */
      private static int getAppVersion(Context context) {
          try {
              PackageInfo packageInfo = context.getPackageManager()
                      .getPackageInfo(context.getPackageName(), 0);
              return packageInfo.versionCode;
          } catch (PackageManager.NameNotFoundException e) {
              // should never happen
              throw new RuntimeException("Could not get package name: " + e);
          }
      }
  
      /**
       * Registers the application with GCM servers asynchronously.
       * &lt;p&gt;
       * Stores the registration ID and app versionCode in the application's
       * shared preferences.
       */
      private void registerInBackground() {
          new AsyncTask() {
  
              @Override
              protected Object doInBackground(Object[] objects) {
                  String msg = "";
                  try {
                      if (gcm == null) {
                          gcm = GoogleCloudMessaging.getInstance(context);
                      }
                      regid = gcm.register(SENDER_ID);
                      msg = "Device registered, registration ID=" + regid;
  
                      // You should send the registration ID to your server over HTTP,
                      // so it can use GCM/HTTP or CCS to send messages to your app.
                      // The request to your server should be authenticated if your app
                      // is using accounts.
                      sendRegistrationIdToBackend();
  
                      // For this demo: we don't need to send it because the device
                      // will send upstream messages to a server that echo back the
                      // message using the 'from' address in the message.
  
                      // Persist the regID - no need to register again.
                      storeRegistrationId(context, regid);
                  } catch (IOException ex) {
                      msg = "Error :" + ex.getMessage();
                      // If there is an error, don't just keep trying to register.
                      // Require the user to click a button again, or perform
                      // exponential back-off.
                  }
                  return msg;
              }
  
              @Override
              protected void onPostExecute(Object o) {
                  mDisplay.append(o + "\n");
                  Logger.logit("onPostExecute","o");
              }
          }.execute(null, null, null);
      }
  
      /**
       * Sends the registration ID to your server over HTTP, so it can use GCM/HTTP
       * or CCS to send messages to your app. Not needed for this demo since the
       * device sends upstream messages to a server that echoes back the message
       * using the 'from' address in the message.
       */
      private void sendRegistrationIdToBackend() {
          // Your implementation here.
          PushNotification.register(OpenUDID.value(this), regid, new AsyncHRHandler(this, true) {
              @Override
              public void onSuccess(String s) {
                  super.onSuccess(s);
              }
          });
      }
  
      /**
       * Stores the registration ID and app versionCode in the application's
       * {@code SharedPreferences}.
       *
       * @param context application's context.
       * @param regId registration ID
       */
      private void storeRegistrationId(Context context, String regId) {
          final SharedPreferences prefs = getGCMPreferences(context);
          int appVersion = getAppVersion(context);
          Log.i(TAG, "Saving regId on app version " + appVersion);
          SharedPreferences.Editor editor = prefs.edit();
          editor.putString(PROPERTY_REG_ID, regId);
          editor.putInt(PROPERTY_APP_VERSION, appVersion);
          editor.commit();
      }
  
  }
  </code></pre>
  
  <p>However <strong>Google Play Service</strong> has been <em>added</em>.</p>
  
  <p><img src="https://i.stack.imgur.com/Mhtrh.png" alt="Project Tree thedjnivek"></p>
  
  <p>On my <strong>module settings</strong></p>
  
  <p><img src="https://i.stack.imgur.com/Tlh87.png" alt="Module settings thedjnivek"></p>
  
  <p><strong>AndroidManifest.xml</strong></p>
  
  <p>
  </p>
  
  <pre><code>&lt;uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="16"/&gt;
  
  &lt;uses-permission android:name="android.permission.INTERNET"/&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt;
  &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt;
  &lt;uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt;
  &lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt;
  
  &lt;!-- For notification push --&gt;
  &lt;uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/&gt;
  &lt;uses-permission android:name="android.permission.GET_ACCOUNTS"/&gt;
  &lt;uses-permission android:name="android.permission.WAKE_LOCK"/&gt;
  
  &lt;permission android:name="com.thedjnivek.android.emarchespublics.permission.C2D_MESSAGE"
      android:protectionLevel="signature" /&gt;
  &lt;uses-permission android:name="com.thedjnivek.android.emarchespublics.permission.C2D_MESSAGE" /&gt;
  
  &lt;application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme"&gt;
  
      &lt;receiver
          android:name=".GcmBroadcastReceiver"
          android:permission="com.google.android.c2dm.permission.SEND" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="com.google.android.c2dm.intent.RECEIVE" /&gt;
              &lt;category android:name="com.thedjnivek.android.emarchespublics" /&gt;
          &lt;/intent-filter&gt;
      &lt;/receiver&gt;
      &lt;service android:name=".GcmIntentService" /&gt;
  
      &lt;activity
          android:name=".fragmentmodule.AppMainTabActivity"
          android:label="@string/app_name"
          android:windowSoftInputMode="adjustResize|stateVisible"&gt;
          &lt;intent-filter &gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  
      &lt;activity
          android:name=".activity.PDFActivity"
          android:label="activity_pdf"/&gt;
  
      &lt;meta-data
          android:name="com.google.android.maps.v2.API_KEY"
          android:value="AIza**************mGE4Mq88"/&gt;
  
  &lt;/application&gt;
  </code></pre>
  
  <p></p>
  
  <p><strong>build.gradle</strong></p>
  
  <pre><code>buildscript {
      repositories {
          mavenCentral()
      }
      dependencies {
          classpath 'com.android.tools.build:gradle:0.6.+'
      }
  }
  apply plugin: 'android'
  
  dependencies {
      compile fileTree(dir: 'libs', include: '*.jar')
      compile: "com.google.android.gms:play-services:3.+"
  }
  
  android {
      compileSdkVersion 17
      buildToolsVersion "17.0.0"
  
      defaultConfig {
          minSdkVersion 8
          targetSdkVersion 16
      }
  }
  </code></pre>
  
  <p>I don't know where the problem is. Someone can't help me ? Thanks a lot !</p>