6

我正在遵循关于 Android 的 Google Drive Quickstart 说明并让它在 Eclipse/Kepler 中运行。(Juno 很狡猾。)但是,我对 IntelliJ 更熟悉,所以我试图弄清楚如何以相应的方式在那里安装这些 API。

我在 Drive API 部分被绊倒了。Eclipse 插件以某种特殊的方式或位置安装 Drive。我添加了 Google-api-services-drive-v2-rev63-1.14.1-beta.jar 作为库,与其他库(Google-play-services 和 api_java_client)相同。但是当我运行应用程序时,它会返回

java.lang.NoClassDefFoundError: com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential

而且我还遇到了与 Drive$Builder 相关的 NoClassDefFoundError。

在 IntelliJ 中,.jar 范围设置为“编译”,但 api_java_client 库设置为“已提供”。他们都没有检查“导出”。

编辑:添加了模块和依赖项。我现在有一个不同的错误:

04-07 00:39:59.766: ERROR/AndroidRuntime(10697): FATAL EXCEPTION: main
    java.lang.NoClassDefFoundError:
com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential
    at com.fallinghawks.weight4.App.onCreate(App.java:15)

App.java:15 是

credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);

我可以找到它要求的课程......

编辑 2,在按照 CrazyCoder 的说明添加库后: 它编译,它运行,但我收到以下错误。我确定我错过了完全正确的事情,我会在一分钟内再试一次,但与此同时错误是:

04-10 18:02:35.120: ERROR/AndroidRuntime(740): FATAL EXCEPTION: main
    java.lang.ExceptionInInitializerError
    at com.google.api.services.drive.Drive$Builder.build(Drive.java:7301)
    at com.example.DriveQuickstart.MyActivity.getDriveService(MyActivity.java:110)
    at com.example.DriveQuickstart.MyActivity.onActivityResult(MyActivity.java:49)
    at android.app.Activity.dispatchActivityResult(Activity.java:5293)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3315)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3362)
    at android.app.ActivityThread.access$1100(ActivityThread.java:141)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    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:793)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NoClassDefFoundError: com.google.common.base.Preconditions
    at com.google.api.services.drive.Drive.<clinit>(Drive.java:63)

(希望是最终编辑):是的,我错过了一些东西,而野兽正在工作!非常感谢!!
现在我可以再次使用 IntelliJ 来处理我的“真实”项目......好多了:)

4

1 回答 1

6

我继续从头开始创建 IntelliJ IDEA 项目,花了大约 15 分钟,工作正常。

  1. 下载Drive API v2 库和依赖项

  2. 在某个地方打开包装,打开readme.html,花几分钟阅读它以了解需要哪些罐子。

  3. 使用带有com.example.drivequickstartpackage 和MainActivity. 使用Android 4.2.2 Google API作为平台。

  4. 将下载的 Drive API 库中的以下 jar 复制到项目libs文件夹中(您应该从第 2 步中了解要使用哪些 jar):

    • google-api-client-1.14.1-beta.jar
    • google-api-client-android-1.14.1-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-oauth-client-1.14.1-beta.jar
    • gson-2.1.jar
    • jsr305-1.3.9.jar
    • google-api-services-drive-v2-rev65-1.14.1-beta.jar
  5. 从这些 jar 中配置项目库。可以通过在 Project View 中选择 jars 来完成,右键单击Add as Library...,将此库添加到主模块的依赖项中。

  6. File| Import Module, 浏览到ANDROID_SDK\extras\google\google_play_services\libproject\google-play-services_‌​lib, 从现有来源。

  7. 添加google-play-services.jar到导入模块的依赖项,启用导出复选框,它应该看起来像这样

  8. 将步骤 6 中创建的模块添加到主应用程序模块的依赖项中

  9. 快速入门MainActivity中的示例代码,第 4 步复制到替换旧代码的文件中,并按照指南进行编辑。MainActivity.javaAndroidManifest.xml

  10. 在模拟器或设备上构建、运行以进行测试(不要忘记快速入门中的步骤 1-2 )。


或者,您可以下载并使用我按照上述步骤创建的完全隔离的示例(步骤 6 中的模块包含在项目中)。

由于某些相机应用程序错误(示例使用相机并且我的模拟器没有配置它),它在模拟器中对我来说失败了,但在 Galaxy Nexus 设备上工作。该示例使用设备相机拍摄照片并将其上传到您的 Google Drive。

于 2013-04-09T21:08:12.900 回答