Игровые сервисы 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
Возможно, это не самое оптимальное решение, но оно выбило меня из дыры.