从Python项目生成Google Cloud Endpoints Android客户端类

2 投票
2 回答
1142 浏览
提问于 2025-04-17 23:52

我为我正在开发的安卓应用编写并测试了一个Python的服务器端接口。

这个服务器端的代码在API Explorer上运行得很好。我也能生成一个包含类的jar文件的压缩包,但当我在Eclipse或Android Studio中导入它时,却无法在我的安卓项目中使用这些类。

在Eclipse中,我可以在Android私有库下看到模型模块,但看不到它的任何类。主要的API类也缺失。

在Android Studio中,当我展开包含的jar文件时,可以看到所有的类,但我无法在项目中使用它们,因为它们无法解析,即使手动导入也不行。看起来AS正确地将JAR作为库导入,因为在项目类中输入导入语句时,自动补全是有效的,但所有类都缺失。

这是我用来生成JAR文件的命令:

endpointscfg.py get_client_lib java --hostname localhost:8080 main.MyApi

我的服务类是这样开始的:

@endpoints.api(name='myapi', version='v1')
class MyApi(remote.Service):

我是不是做错了什么?

还有,从这个Java类的压缩包中,我是否应该将libs目录下的所有jar文件都导入到我的安卓项目中?

提前谢谢你。


更多信息:

生成的jar文件包含一个主类,如下所示:

public class MyApi extends  com.google.api.client.googleapis.services.json.AbstractGoogleJsonClient {

}

这个主类有一个内部类:

public class Blob {

    public Request request(java.lang.String type) throws java.io.IOException {
      Request result = new Request(type);
      initialize(result);
      return result;
    }

内部类Blob在它的请求结果对象上有以下错误:

initialize (com.google.api.client.googleapis.services.AbstractGoogleClientRequest<?>)  in MyApi cannot be applied to  (com.appspot.trim_bot.myapi.MyApi.Blob.Request)

4月16日补充:

看起来编译后的EndPoints类无法解析它们的依赖关系。

2 个回答

0

这里有一个更好的方法可以参考:如何在Android Studio中创建一个库项目以及一个使用该库项目的应用项目

我使用了第三个答案。这里的做法是先在Android Studio中打开压缩的Endpoints库(我们称它为library1),然后进行构建。构建完成后,你需要修改你正在工作的项目的gradle.settings,具体如下:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

我想补充一点的是,一旦这个步骤正确完成(也就是说,你可以在你正在工作的项目的文件夹结构中看到library1作为第二个项目),你需要去点击文件 > 项目结构,然后选择你正在工作的模块名称。接着,去依赖项标签 > 点击‘+’,然后在下拉菜单中选择‘模块依赖’。这样你就可以将library1模块添加到你当前的项目中了。

希望这对某些人有帮助!

0

我遇到过类似的问题,后来我通过以下方法解决了。需要注意的是,这可能不是最有效的做法。

  • 我的应用引擎项目是用ant来运行的,所以我通过以下命令生成库:
    $/appengine-java-sdk/bin/endpoints.sh get-client-lib name.MessageEndpoint
    $mkdir tmp
    $mv name-v1-java.zip tmp/
    $cd tmp; unzip name-v1-java.zip; jar -xvf name_appspot_com-foo-v1.jar
    $mv com {安卓工作室项目的根目录/src/main/java}
  • 在安卓工作室中编辑src/build.gradle,添加在构建端点客户端库时添加的jar列表。

    compile(group: 'com.google.api-client', name: 'google-api-client-appengine', version: '1.18.0-rc')
    compile(group: 'com.google.api-client', name: 'google-api-client-gson', version: '1.18.0-rc')
    ....

    重新构建后,看起来就可以正常工作了。
  • 撰写回答