NoClassDefFoundError в библиотеке V2 для Google Play Services
Я получаю следующее исключение при попытке использовать библиотеку Google Play Services V2 после выполнения официального официального учебника.
java.lang.NoClassDefFoundError: com.google.android.gms.R$string
at com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.a(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.getErrorDialog(Unknown Source)
Где я ошибся?
Ответы
Ответ 1
Версия 2 включает ресурсы и должна быть импортирована как проект библиотеки. Инструкции о том, как это сделать в различных IDE, см. В инструкциях http://developer.android.com/google/play-services/setup.html.
Ресурсы для GooglePlayServicesUtil.getErrorDialog(), которые направляют пользователя на установку, обновление, включение и т.д. Службы Google Play, если они недоступны на устройстве.
Ответ 2
У меня также есть одни и те же проблемы один раз, я правильно выполнил шаг и смог решить эту проблему
Сначала (настройте свой проект с консоли разработчика Google)
Перейдите в Консоль API - Код Google
Создать проект Как показано на изображениях
![enter image description here]()
Нажмите "Создать", затем вы попросите добавить название проекта, как показано
![enter image description here]()
как только вы создадите свой проект, чтобы выбрать, какую услугу нам нужно использовать. В этом случае нам нужна карта Android v2, поэтому выберите API Android Google Maps v2 из службы. Как показано, ![enter image description here]()
Теперь перейдите в Api Access и создайте свой OAuth 2.0. Предоставьте имя своего пакета и отпечаток SHA1 в соответствующих полях.
![enter image description here]()
Как только вы закончите с OAuth 2.0, мы готовы использовать ваш ключ API
![enter image description here]()
Теперь создайте проект Android с тем же именем пакета, который используется при создании OAuth 2.0. и проверьте, есть ли у вас сервис Google Play в Android SDK Manager, в противном случае установите сервис google play.
![enter image description here]()
После установки Google playervice вы найдете библиотеку игр Google в Android YourSdkpath\extras\google\google_play_services. Подключите этот проект к своей рабочей области и передайте его в качестве библиотеки refrence для своего проекта
![enter image description here]()
![enter image description here]()
![enter image description here]()
После этого поместите соответствующие java и xml файлы в ваш проект.
MainActivity.java
package yourpackage;//Package name used while creating the Api key
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
public class MainActivity extends FragmentActivity {
GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
// Showing status
if(status==ConnectionResult.SUCCESS)
{
SupportMapFragment supportMapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.map);
// Getting a reference to the map
googleMap = supportMapFragment.getMap();
}
else{
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
activity_main.xml
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="yourpackage"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<permission
android:name="yourpackage.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="yourpackage.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="yourpackage.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="YourAPIkey"/>
Надеюсь, это поможет вам.
Ответ 3
Для Android Studio:
1) Откройте настройки модуля:
2) Добавить (Импортировать) модуль google_play_service_lib из SDK
![Picture]()
3) Модуль google_play_service_lib проверить как библиотеку
4) Добавить библиотеку google_play_service.jar из SDK
5) Завершить
![Picture]()
Ответ 4
Если вы уже обновили SDK и получили такую ошибку, запомните:
- используйте новую версию google-play-services.jar, если у вас есть копия этого файла в проекте eclipse.
- установить target = android-19 в project.properties
- для нового API (я использую API 19) вам может потребоваться добавить следующий код
AndroidManifest.xml
<application
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
Я также использую нашSdkpath\extras\google\google_play_services как импортированную библиотеку Eclipse, как описано выше.
Ответ 5
Я решил эту ошибку, установив "Копировать проекты в рабочее пространство" при импорте библиотеки игровых сервисов google.
Подробнее здесь: http://developer.android.com/google/play-services/setup.html
Ответ 6
если вы используете
compile 'com.google.android.gms:play-services:9.0.2'
измените его на отдельные, например
compile 'com.google.android.gms:play-services-location:9.0.2'
также добавить
compile 'com.android.support:multidex:1.0.1'
, если у вас есть multiDexEnabled=true
Ответ 7
У меня такая же проблема с Android Studio при создании проекта без Gradle.
Это может быть проблема с именем пакета в AndroidManifest.xml в проекте GooglePlayService.
Он должен быть package = "com.google.android.gms" .
Проблема возникает, когда я добавляю проект библиотеки "Новый модуль" вместо "Импортировать модуль" .
![enter image description here]()
Когда вы выбираете Новый модуль, Android Studio показывает диалог, чтобы указать "Имя модуля" и "Имя пакета", и по умолчанию "Имя пакета" выглядит как "com.example.MODULE_NAME_YOU_SPECIFED", который неправильный, Это очень легко упустить, потому что проект строится с успехом.
![enter image description here]()
Когда вы добавляете проект библиотеки через "Модуль импорта" , все должно быть в порядке, потому что Android Studio просто добавляет проект без каких-либо изменений с исходным кодом проекта библиотеки.
Ответ 8
У меня тоже такая же проблема. Если вы запускаете свое приложение в эмуляторе, то может возникнуть такая ошибка, потому что в большинстве эмуляторов не установлено приложение google playService (Play Store).
Итак, попробуйте запустить приложение на Android-устройстве, на котором установлено приложение playService.
Решение: - добавьте код ошибки ошибки в try...catch
, а затем попробуйте, он также будет работать в эмуляторе.
Примечание. - Служба Google Messaging требует palyservice. иначе сбросить ошибку SERVICE_NOT_AVAILABLE