Android谷歌分析跟踪器NoClassdefFoundError

时间:2012-05-14 08:55:09

标签: android google-analytics

这里是一个小代码,我从谷歌分析的示例代码中选择了它。

tracker = GoogleAnalyticsTracker.getInstance();

tracker.startNewSession("UA-YOUR-ACCOUNT-HERE", this);
    setContentView(R.layout.main);
    Button createEventButton = (Button)findViewById(R.id.NewEventButton);
    createEventButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            tracker.trackEvent(
                    "Clicks",  // Category
                    "Button",  // Action
                    "clicked", // Label
                    77);       // Value
        }
    });

错误:

'05-14 13:52:36.599: E/AndroidRuntime(7367): FATAL EXCEPTION: main
05-14 13:52:36.599: E/AndroidRuntime(7367): java.lang.NoClassDefFoundError: com.google.android.apps.analytics.GoogleAnalyticsTracker
05-14 13:52:36.599: E/AndroidRuntime(7367):     at com.google.android.apps.analytics.sample.TestActivity.onCreate(TestActivity.java:19)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.os.Looper.loop(Looper.java:130)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at android.app.ActivityThread.main(ActivityThread.java:3687)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at java.lang.reflect.Method.invokeNative(Native Method)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at java.lang.reflect.Method.invoke(Method.java:507)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
05-14 13:52:36.599: E/AndroidRuntime(7367):     at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:28)

要在使用Google Analytics v2beta库时解决错误 NoClassdefFoundError 的问题,您需要将此库标记为“已导出”

如何?

  • 添加您的库:项目 - >属性 - > Java构建路径 - >图书馆 - >添加外部JAR ......
  • 然后在同一窗口中转到“订购和导出”,并使用复选框将此库标记为“已导出”。

您的proyect现在可以在运行时找到Analytics类!

更多细节及其发生原因here

答案 1 :(得分:13)

更新ADT后我遇到了这个问题。

我将所有JAR文件存储在名为“lib”的文件夹中,并以正常的Ec​​lipse方式将jar添加到构建路径中。在我更新之前,这很好用。

在我更新之后,我得到了一个我可以清楚地看到包含在jar中的类的NoClassDefFoundError(检查了ReferencedLibraries类)。

解决方案是从构建路径中删除我的jar并将我的“lib”文件夹重命名为“libs”。这是一个蚂蚁约定,似乎是新ADT找到的方式,并在.apk文件中包含库。一旦我这样做,一切正常。