Java IllegalAccessError仅在导出的已签名APK上出现

Java IllegalAccessError仅在导出的已签名APK上出现,java,android,eclipse,release,Java,Android,Eclipse,Release,我在这里遇到了真正的麻烦。我有一个应用程序,它使用Google Analytics for Android lib,当我从eclipse在我的设备上运行该应用程序时,它运行良好 -keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks 当项目准备发布时,我将我的应用程序的更新上传到Android Market上。幸运的是,我决定检查应用程序是否工作,所以在卸载了我自己的应用程序版本后,我从Android

我在这里遇到了真正的麻烦。我有一个应用程序,它使用Google Analytics for Android lib,当我从eclipse在我的设备上运行该应用程序时,它运行良好

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
当项目准备发布时,我将我的应用程序的更新上传到Android Market上。幸运的是,我决定检查应用程序是否工作,所以在卸载了我自己的应用程序版本后,我从Android Market下载了我刚刚上传的新版本。打开应用程序时,应用程序崩溃,出现以下错误:

java.lang.IllegalAccessError: tried to access method com.google.android.apps.analytics.g$a.<init>:(Lcom/google/android/apps/analytics/a$a;Lcom/google/android/apps/analytics/g;Ljava/lang/String;Ljava/lang/String;)V from class com.google.android.apps.analytics.c
    at com.google.android.apps.analytics.c.<init>(Unknown Source)
    at com.google.android.apps.analytics.c.<init>(Unknown Source)
    at com.google.android.apps.analytics.c.<init>(Unknown Source)
    at com.google.android.apps.analytics.b.a(Unknown Source)
    at com.google.android.apps.analytics.f.a(Unknown Source)
    at com.me.myapp.onCreate(Unknown Source)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
java.lang.IllegalAccessError:试图访问com.google.android.apps.analytics.g$a.:(Lcom/google/android/apps/analytics/a$a;Lcom/google/android/apps/analytics/g;Ljava/lang/String;Ljava/lang/String;)V类com.google.android.apps.analytics.c
在com.google.android.apps.analytics.c.(未知来源)
在com.google.android.apps.analytics.c.(未知来源)
在com.google.android.apps.analytics.c.(未知来源)
位于com.google.android.apps.analytics.b.a(未知来源)
位于com.google.android.apps.analytics.f.a(未知来源)
在com.me.myapp.onCreate上(未知源)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:117)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:3683)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:839)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
在dalvik.system.NativeStart.main(本机方法)
我不知道为什么会这样。我所能说的是,我的项目的/bin/目录中的APK比假定的已签名和导出的APK大约大0.1MB。我曾尝试通过ADB手动将已签名和导出的APK安装到我的设备上,但我得到了与上述相同的错误

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks

任何帮助都将不胜感激。

我出现了同样的错误,但通过将此添加到我的proguard.cfg中修复了它:

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks

虽然这是一个老问题,但在某些方面它可能会帮助某些人。我在这方面也遇到了很多麻烦,导出包的解决方案是相当随机的

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
我的一般解决方案是禁用自动生成,清理它,然后手动生成库项目

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
比如说

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
  • 项目菜单下
  • 取消选中“自动生成”
  • 然后项目清洁…
  • 在此窗口中,取消选中立即开始构建
  • 选择“清理所有项目”,然后单击“确定”
  • 如果您的中没有其他包含的项目,并且只是其中一个,请将您的项目导出为已签名的APK
如果您有任何包含的库项目(Sherlock ActionBar、HoloEverywhere等)

-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks
  • 单独选择每个项目,然后执行项目构建项目(不是全部构建)。
    • 这将只构建一个库
    • 对包含的任何库项目执行此操作
  • 单击“现在”,将项目导出为已签名的APK

这通常对我有效,并阻止了许多无法解释的导出问题。

尝试重新下载最新的Android Google Analytics SDK,并重新执行所有步骤,看看是否有效。我同意。获取另一个SDK并重建应用程序。打包应用程序的最后一步是对已签名的apk进行zipalign。这将根据apk的内容减少大小。它将与您的bin/dir中apk的大小不匹配
-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks