3

我正在使用 Eclipse Juno ADT bundle + Google Plugin for Eclipse 为 Android 4+ 开发。我需要以编程方式登录谷歌帐户才能使用谷歌日历 API。为此,我正在使用客户经理。我收到以下错误:

05-05 13:28:55.605: E/AndroidRuntime(11186): FATAL EXCEPTION: main
05-05 13:28:55.605: E/AndroidRuntime(11186): java.lang.NoClassDefFoundError: com.google.android.gms.common.AccountPicker
05-05 13:28:55.605: E/AndroidRuntime(11186):    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.newChooseAccountIntent(GoogleAccountCredential.java:171)
05-05 13:28:55.605: E/AndroidRuntime(11186): ...

这是导致它的代码:

GoogleAccountCredential credential;

credential = GoogleAccountCredential.usingOAuth2(this, CalendarScopes.CALENDAR);

chooseAccount();

private void chooseAccount() {

  startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);

}

我已经在 stackoverflow 上搜索了解决方案。libs 目录包含我通过 google 插件为 eclipse 导入的 eclipse 日历库文件(其中还放置了身份验证等......库):

android-support-v4.jar
google-api-client-1.14.1-beta.jar
google-api-client-android-1.14.1-beta.jar
google-api-services-calendar-v3-rev41-1.14.2-beta.jar
google-http-client-1.14.1-beta.jar
google-http-client-android-1.14.1-beta.jar
google-http-client-gson-1.14.1-beta.jar
google-http-client-jackson-1.14.1-beta.jar
google-http-client-jackson2-1.14.1-beta.jar
google-oauth-client-1.14.1-beta.jar
gson-2.1.jar
jackson-core-2.1.3.jar
jackson-core-asl-1.9.11.jar
jsr305-1.3.9.jar

然而,这些似乎不包括

com.google.android.gms.common.AccountPicker

如果我在我的代码中导入它,则导入代码行被标记为错误。那么这是什么一回事。我从运行良好的 Google 日历示例中复制了这段代码:

http://samples.google-api-java-client.googlecode.com/hg/calendar-android-sample/

该代码具有完全相同的库,除了:

  1. 日历库是 rev33 而不是 rev41
  2. jackson 和 jackson-asl 库丢失
  3. 示例代码中存在但我的代码中没有的每个库文件的 .properties 文件

所以这应该不是问题。但是,查看代码的导入部分,谷歌日历示例代码具有:

import com.google.android.gms.common.GooglePlayServicesUtil;

但是如果我尝试在我的代码中插入这行代码,它会被标记为错误,说明无法解析 import com.google.android.gms.common.GooglePlayServicesUtil。

这个帖子

java.lang.NoClassDefFoundError: com.google.android.gms.common.AccountPicker

说他们能够

import com.google.android.gms.common.AccountPicker;

但我想知道来自哪个图书馆。

我什至尝试通过一次检查一个文件但找不到它来查找可以包含 com.google.android.gms.common.* 的库的原始 android 日历示例。这怎么可能?

我究竟做错了什么?

非常感谢您的所有帮助。

4

2 回答 2

3

我最近遇到了类似的问题。我的应用程序(尚未投入生产)会突然(从 5 月初开始)在调用时开始抛出无法捕获的“NoClassDefFoundError”错误

GoogleAccountCredential.usingOAuth2(这个,DriveScopes.DRIVE_FILE)

方法。这是随机发生的,通常是早上第一次发生。我可以通过重新安装我的 Google 帐户来修复它。但是,这对于生产来说不是一个好的解决方案。我花了令人沮丧的几个小时试图解决它,直到我终于意识到我有另一个应用程序在相同的代码序列中没有相同的问题。所以我对它们进行了比较,并意识到“好”的在“包资源管理器->项目->属性->Java 构建路径”中有不同的条目序列。“好”的有

'google-play-services.jar' 在 'android-support-v4.jar' 之前,

“坏”的人倒退了。所以我切换了顺序(使用对话框中的向上、向下按钮),它似乎解决了问题。又一个WT……?片刻!有人对此有意见吗?

于 2013-06-09T15:38:30.380 回答
3

好的,我发现了我缺少的东西。

  1. 确保您已下载 Android SDK Services -> Extras -> Google Play services

  2. 按照以下链接提供的说明将 google-play-services-lib 库添加到您的项目中:

http://developer.android.com/tools/projects/projects-eclipse.html#ReferenceLibraryProject

此致

于 2013-05-05T13:05:56.733 回答