从Python项目生成Google Cloud Endpoints Android客户端类
我为我正在开发的安卓应用编写并测试了一个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 个回答
这里有一个更好的方法可以参考:如何在Android Studio中创建一个库项目以及一个使用该库项目的应用项目
我使用了第三个答案。这里的做法是先在Android Studio中打开压缩的Endpoints库(我们称它为library1),然后进行构建。构建完成后,你需要修改你正在工作的项目的gradle.settings,具体如下:
include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')
我想补充一点的是,一旦这个步骤正确完成(也就是说,你可以在你正在工作的项目的文件夹结构中看到library1作为第二个项目),你需要去点击文件 > 项目结构,然后选择你正在工作的模块名称。接着,去依赖项标签 > 点击‘+’,然后在下拉菜单中选择‘模块依赖’。这样你就可以将library1模块添加到你当前的项目中了。
希望这对某些人有帮助!
我遇到过类似的问题,后来我通过以下方法解决了。需要注意的是,这可能不是最有效的做法。
$/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}
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')
....
重新构建后,看起来就可以正常工作了。