无法在 Android 项目中导入 Google Cloud Endpoints 客户端库类

8 投票
3 回答
1298 浏览
提问于 2025-04-17 21:38

我在使用Google Cloud Endpoints时遇到了一些困难。我在GAE上运行的Python端点项目一切正常,使用API浏览器也没问题。但是,我在生成客户端库并在我的安卓应用中使用它时遇到了麻烦。我尝试了很多示例项目,但每次都遇到同样的问题;我无法导入和使用客户端库中的模型类。

这是我正在做的(为了这个例子,我将使用helloworld API的Python示例,链接在这里:https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-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

有没有人能帮我看看这是怎么回事?我尝试了很多不同的方法来解决这个问题,但每次都遇到同样的麻烦。

非常感谢,

汤姆

3 个回答

0

我解决了这个问题,下面是我的解决方案。

我从Eclipse切换到了Android Studio Preview 0.4.6,这样帮助我解决了一些谷歌库导入的问题(我想这可能和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

希望这能为其他人节省时间。

0

这篇帖子提到,Android Studio的“添加为库”功能有个bug:Android Studio:在尝试配置Google Apps Endpoints客户端库时,点击“添加为库”会出现IncorrectOperationException错误

不确定这个问题是否也适用于Eclipse。

4

问题是,默认情况下,生成的压缩文件只包含源代码的jar包,而不是你可以在Android应用中使用的实际编译好的库jar包。

解决方法如下:

  1. 在你的后端API文件夹中(也就是和app.yaml文件在同一个地方),生成客户端库,方法是将其作为一个gradle库来生成,命令如下:
    <gae-sdk-path>\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包。

撰写回答