1

我在我的项目中使用 Google Play 游戏服务库(以及 BaseGameUtils)。当我从 Eclipse 启动它时,我的应用程序可以工作,但今天我将它导出为 apk,启动并得到一个 AbstractMethodError。我尝试使用 eclipse 和 ant 制作 apk,但结果相同。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)
4

2 回答 2

1

这种类型的错误通常是由于将 Proguard 与太旧的 targetSDK 一起使用造成的。尝试将应用程序的目标 SDK 设置为 >= 17,看看这是否能解决问题。

在 AndroidManifest.xml 中:

<manifest ...>

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

    <application ...>
           ...
    </application>
</manifest>
于 2013-05-28T22:16:30.243 回答
1

我很感激,我真的很感激,这个问题已经将近一年了!但是我遇到了完全相同的问题,看来这是互联网上对这个确切问题的唯一参考!

此处发布的内容并没有解决我的问题,但它确实为我指明了 ProGuard 的方向。既然我已经解决了,我想把它贴出来,这样未来的人(也许是我)就不会对着监视器大喊“Tertium,你看到了什么!” #xkcd。

原来我没有正确设置 Proguard。经过反复试验,我发现以下几行让我继续:

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

添加一些背景上下文:

  • 我正在通过 Maven 构建,android-maven-plugin
  • 这是一个基于 LibGDX 的游戏

这可能不是最佳解决方案,但它让我摆脱了困境。

于 2014-02-13T19:28:07.527 回答