【问题标题】:Cannot import google cloud endpoints client library class in Android project无法在 Android 项目中导入谷歌云端点客户端库类
【发布时间】:2014-04-13 17:31:14
【问题描述】:

我无法让 Google Cloud Endpoints 正常工作。我有一个在 GAE 上运行的 Python 端点项目,它使用 api explorer 可以完美运行。但是,我正在努力正确生成客户端库并在我的 android 应用程序中使用它。我尝试了许多示例项目,每次都遇到同样的问题;我无法从客户端库中导入和使用模型类。

这就是我正在做的事情(对于这个例子,我将使用https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-python 的 helloworld api python 示例)

  1. 解压示例代码
  2. 通过导航到文件夹并运行来生成客户端库

    <gae-sdk>\endpointscfg.py get_client_lib java helloworld_api.HelloWorldApi
    
  3. 解压生成的文件夹并复制到eclipse中项目的根目录

  4. 在 Eclipse 中添加“your_app_id_appspot_com-helloworld-v1-20140310110152-java-1.17.0-rc-sources.jar”到构建路径(右键单击 JAR>构建路径>添加到构建路径)

现阶段可以导入com.appspot.your_app_id.helloworld.model.*但无法导入com.appspot.your_app_id.helloworld.model.Greeting

谁能解释这里发生了什么?我尝试了许多不同的方法来让它工作,但每次都遇到同样的问题。

非常感谢,

汤姆

【问题讨论】:

  • 我在 Eclipse(使用 ADT)中也面临同样的问题。你能找到解决方案吗?如果是的话,请分享一下
  • 我为它提出了一个谷歌缺陷。如果您也发现问题,也可以加注星标(Google 可能会更快地修复它)code.google.com/p/googleappengine/issues/detail?id=10799
  • 不,抱歉。我在这个问题上遇到了完全的死胡同,最终以几天的工作为代价切换到了 java 后端。感谢您向 Google 提出建议。
  • 感谢汤姆的更新。我希望谷歌能尽快修复它,因为它是关键库的重大突破。我不知道为什么他们仍然没有更新。好伤心
  • 有人在 Eclipse 中得到这个工作吗?经过数小时的挫折,我也陷入了死胡同。

标签: android python eclipse google-app-engine google-cloud-endpoints


【解决方案1】:

这篇帖子说Android Studio的Add As Library有一个bug:Android Studio: IncorrectOperationException when 'Add as Library' is clicked whilst trying to configure Google Apps Endpoints client libraries

不确定它是否适用于 Eclipse。

【讨论】:

  • 这也是我的问题之一!虽然我已经解决了另一个问题,但我仍然无法访问 Android Studio 或 Eclipse 中的类,所以我认为我生成的端点客户端库不正确。
【解决方案2】:

我能够解决这个问题,并提供了以下解决方案。

我从 Eclipse 切换到 Android Studio Preview 0.4.6,这有助于摆脱 Google 的一些库导入问题(我猜是通过 build.gradle 配置)。我觉得这不是我之前使用的 Eclipse 的问题。

我能够解决导入问题。谷歌官方文档教程部分的代码需要同步。

解决办法是大致做如下改动:

MainActivity.java中,替换:

HelloGreeting with HelloworldApiGreeting 

MainActivity.java中,在顶部添加以下内容:

import android.widget.Toast; 
import android.os.AsyncTask; 
import android.util.Log 
import com.appspot.androidbackend1.helloworld.model.HelloworldApiGreeting;
import com.appspot.androidbackend1.helloworld.model.HelloworldApiGreetingCollection;

MainActivity.java 中,在顶部注释以下内容:

import com.appspot.androidbackend1.helloworld.Helloworld.Greetings.Multiply; 
import com.appspot.androidbackend1.helloworld.model.HelloGreeting;

Application.java中,在顶部添加以下内容:

import com.appspot.androidbackend1.helloworld.model.HelloworldApiGreeting;

Application.java 中,替换:

HelloGreeting with HelloworldApiGreeting

希望这可以为其他人节省时间

【讨论】:

  • 您是否能够使其与您使用他们的工具实际生成的库一起工作?不幸的是,当我尝试使用我生成的库时,这个答案对我没有帮助。谷歌很糟糕......
  • @k_day 是的。我使用了我使用命令生成的库:C:\gaurav\coding\python\androidbackend1&gt;"C:\Program Files (x86)\Google\google_appengine\endpointscfg.py" get_client_lib java -o . helloworld_api.HelloWorldApi
【解决方案3】:

问题在于,默认情况下,生成的 zip 文件只包含一个源 jar,而不是您的 Android 应用可以使用的实际编译的库 jar。

解决方案如下:

  1. 在您的后端 api 文件夹中(从您的 app.yaml 所在的同一位置),将客户端库生成为 gradle 库,如下所示:
    &lt;gae-sdk-path&gt;\endpointscfg.py get_client_lib java -bs gradle helloworld_api.HelloWorldApi

  2. 您现在将拥有一个 helloworld-v1.zip。解压(在此处或在 ~/temp 等方便的地方)

  3. 这将创建一个名为 helloworld 的文件夹,应该在其中有一个 build.gradle 和一个 src 文件夹。

  4. 使用此文件夹中的“gradle install”构建您的客户端库。

  5. build/libs/helloworld-v1-1.X.X-SNAPSHOT.jar 复制到您的 Android 应用的 libs 文件夹中。

  6. 通过右键单击/添加为库将其添加为 Android Studio 中的库。

  7. 您的类现在应该可以正确解析了。

第 4 步应该将刚刚构建的客户端库安装到您的本地 maven 存储库中。您可以按照您提取的 helloworld/ 文件夹中的 readme.html 中的说明直接与您的 Android 应用程序的 gradle 构建系统集成,而不是手动复制您构建的 jar。

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 2013-04-15
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2019-07-07
    • 2020-12-31
    相关资源
    最近更新 更多