Сбой приложения Android с помощью BaseGameActivity

Так что, несколько трудно спросить. Я хочу использовать сервис игровой игры google, чтобы получить доступ к таблице лидеров для моей игры. Я попытался использовать BaseGameActivity, как показано здесь Доступ к API-интерфейсам игр

Пробовал несколько вещей, сделал некоторые поиски, но не мог понять проблему. Мое приложение вылетает при запуске BaseGameActivity. Ошибка журнала:

03-10 17:44:54.071: E/AndroidRuntime(31435): FATAL EXCEPTION: main
03-10 17:44:54.071: E/AndroidRuntime(31435): java.lang.IllegalStateException: A
 fatal  developer error has occurred. Check the logs for further information.
03-10 17:44:54.071: E/AndroidRuntime(31435):    at     com.google.android.gms.internal.dw$h.b(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$h.b(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$b.bR(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$a.handleMessage(Unknown Source)

Консоль показывает:

[2014-03-10 17:47:18 - BaseGameUtils] Не удалось найти BaseGameUtils.apk!

Ответ: Мне пришлось сделать две записи метаданных о приложении в манифесте. В журнале без фильтров перечислены соответствующие ошибки

Две записи были

<meta-data
        android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    <meta-data
        android:name="com.google.android.gms.appstate.APP_ID"
        android:value="@string/app_id" />

только одна из этих записей была упомянута в учебнике.

Ответ 1

Я только что закончил создание лидеров, и это было больно, но я сделал это, и он работает. Вот длинный список предложений, которые могут прямо или косвенно помочь вам. Я использую Eclipse.

  • Для API Google Play минимальный SDK равен 9, поэтому поставьте это в своем манифесте на его собственную строку:

    < использует-SDK       Android: minSdkVersion = "9"       андроид: targetSdkVersion = "19" /" > // любой желаемый объект

  • Импортируйте проект BaseGameUtils в рабочее пространство. Вам не нужно изменять какой-либо из этих кодов.

  • Импортировать google-play-services_lib. Это находится в папке sdk. Моя папка sdk находится рядом с моей папкой eclipse. В любом случае это происходит в: sdk/extras/google/google_play_services/libproject/google-play-services_lib. Вам не нужно изменять какой-либо из этих кодов.

  • Щелкните правой кнопкой мыши на свой проект на вкладке проводника пакета (обычно на левой стороне затмения со всеми папками проекта). Затем нажмите "Свойства" (Alt + Enter). Затем нажмите на Android. В нижней части страницы Android должна быть "Библиотека". Нажмите кнопку добавления и добавьте BaseGameUtils и google-play-services_lib. Не нажимайте "Библиотека".

  • Убедитесь, что все файлы android-support-v4.jar во всех соответствующих проектах используют ту же самую последнюю версию. Вы можете обновить свой файл поддержки, щелкнув правой кнопкой мыши на своем проекте на вкладке "explorer" и перейдите в → Инструменты Android → Добавить библиотеку поддержки. Затем вы принимаете и обновляете. Вы можете дополнительно проверить, есть ли у всех перечисленных проектов этот обновленный фляга, щелкнув правой кнопкой мыши ваш проект и перейдя к свойствам. Затем нажмите "Путь сборки Java", а затем перейдите на вкладку "Библиотеки". Вы должны увидеть указанную банку поддержки. Если нет, вы можете добавить банку, где бы она ни находилась в проекте. Если вы этого не сделаете, у вас может быть что-то вроде JAR MIXMATCH. Конечно, вы увидите точную проблему на своей консоли, поэтому ее легко исправить и диагностировать.

  • Ваш манифест должен быть:   < мета-данные       Android: name= "com.google.android.gms.games.APP_ID"       android: value = "@string/app_id" / " >   < мета-данные       Android: name=" com.google.android.gms.version "      android: value =" @integer/google_play_services_version "/" >

Последняя строка с @integer просматривает google_play_services_version, поэтому вам не нужно ничего делать в будущем при изменении версии игры Google. Не производите жесткое кодирование номера версии или вам придется вручную обновлять его часто.

  • MyProject расширяет BaseGameActivity.

  • Затем, чтобы вызвать таблицу лидеров и обновить ее, их пример кода из 2 строк кода отлично работает. Смотри ниже. https://developers.google.com/games/services/android/leaderboards Вы должны передать идентификатор своего лидера, указанный вам, когда вы связываете свое приложение с консолью разработчика Google Play. Это строка, которая выглядит примерно так: "DkbGvageyBASEWEFCx". Обновление и получение таблицы лидеров приведет к сбою, если вы не подключены. Ознакомьтесь с полным кодом примера ниже.

    //обновить if (getApiClient(). isConnected())//getAPIClient является частью BaseGameUtils Games.Leaderboards.submitScore(getApiClient(), leaderboardID, оценка);

    //показать if (getApiClient(). isConnected()) startActivityForResult (Games.Leaderboards.getLeaderboardIntent(getApiClient(), leaderboardID), 1337);

  • Наконец, если вы используете приложение с другим хранилищем ключей, которое имеет другой SHA1 (Secure Hash Algorithm), чем тот, который у вас есть в магазине воспроизведения Google, тогда будет ошибка, и вы не будете быть в состоянии подключиться. Поэтому, если вы загрузили приложение с хранилищем ключей с помощью SHA1, например ab: cd: de... и вы отлаживаете свое приложение, вы можете увидеть проблемы, так как Eclipse будет использовать хранилище отладки по умолчанию для Android, у которого есть другой SHA1. Вы не сможете подключиться, и, следовательно, вы не сможете использовать какие-либо сервисы Google Play.

  • Я рекомендую вам посмотреть пример кода под названием "Trivial Quest". https://github.com/playgameservices/android-samples Это под eclipse_compat. В этом примере кода показано, как войти и разблокировать достижение. Если вы можете войти в систему, вы можете сделать достижения и таблицы лидеров очень легко.

  • Там много чего, но вы дали нам лишь небольшую часть головоломки. Если у вас возникли проблемы, сообщите нам об этом.

Ответ 2

Думаю, может быть, вам нужно разместить библиотеку сервисов Google Play в своих зависимостях,

В этой строке:

03-10 17: 44: 54.071: E/AndroidRuntime (31435): at com.google.android.gms.internal.dw $h.b(Неизвестный источник)

Наверное, у вас проблемы с настройками карт Google, используется библиотека GMS из Google

на карты и другие сервисы из Служб Google Play, если у вас есть проблемы с этим, возможно, вы добавили неправильные версии в свой проект.

Лучший способ для вас - downalod Google Play Services для игр и добавить в свой проект

зависимости.

https://developers.google.com/games/services/downloads/ (это игровые сервисы Google специфичны для игр)