Игровые сервисы Google Play: AbstractMethodError при запуске экспортированного apk, в то время как работает нормально, если запустить из eclipse

Я использую в своем проекте библиотеку Google Play Game Services (а также BaseGameUtils). Мое приложение работает, когда я запускаю его из Eclipse, но сегодня я экспортировал его как apk, запустил и получил AbstractMethodError. Я пытался сделать apk как с eclipse, так и с ant, но результат был одинаковым. Eclipse-make и ant-make apk работали до того, как я добавил (или начал использовать) игровые сервисы Google Play в моем проекте (он не новый). Как я могу решить эту странную проблему? Похоже, код gms несовместим с моими двоичными файлами?

Трассировки стека:

java.lang.AbstractMethodError: abstract method not implemented
    at com.google.android.gms.internal.be.onViewAttachedToWindow(Unknown Source)
    at android.view.View.dispatchAttachedToWindow(View.java:11948)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2415)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2422)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2422)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1209)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1006)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4404)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
    at android.view.Choreographer.doFrame(Choreographer.java:532)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
    at android.os.Handler.handleCallback(Handler.java:725)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5041)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
    at dalvik.system.NativeStart.main(Native Method)

2 ответа

Решение

Этот тип ошибки обычно происходит из-за использования Proguard со слишком старым targetSDK. Попробуйте установить целевой SDK вашего приложения на>= 17 и посмотреть, решит ли это проблему.

В AndroidManifest.xml:

<manifest ...>

    <uses-sdk android:minSdkVersion="8" 
              android:targetSdkVersion="17"  />

    <application ...>
           ...
    </application>
</manifest>

Я действительно ценю, что этому вопросу почти год! Однако у меня была точно такая же проблема, и, похоже, это единственная ссылка на эту проблему в Интернете!

То, что было размещено здесь, не решило мою проблему, однако оно указало мне на направление ProGuard. Так как я решил это, я хотел опубликовать это, чтобы будущие люди (возможно, я снова) не заканчивали тем, что кричали на монитор "Tertium, Что ты видел!" #xkcd.

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

 -keep class com.google.** { *; }
 -dontwarn com.google.**

Чтобы добавить немного фонового контекста:

  • Я строю через Maven, Android-Maven-плагин
  • Это игра на основе LibGDX

Возможно, это не самое оптимальное решение, но оно выбило меня из дыры.

Другие вопросы по тегам