无法在 Android 项目中导入 Google Cloud Endpoints 客户端库类
我在使用Google Cloud Endpoints时遇到了一些困难。我在GAE上运行的Python端点项目一切正常,使用API浏览器也没问题。但是,我在生成客户端库并在我的安卓应用中使用它时遇到了麻烦。我尝试了很多示例项目,但每次都遇到同样的问题;我无法导入和使用客户端库中的模型类。
这是我正在做的(为了这个例子,我将使用helloworld API的Python示例,链接在这里:https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-python)
- 解压示例代码
通过进入文件夹并运行以下命令来生成客户端库
<gae-sdk>\endpointscfg.py get_client_lib java helloworld_api.HelloWorldApi
解压生成的文件夹,并将其复制到Eclipse项目的根目录
在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 个回答
我解决了这个问题,下面是我的解决方案。
我从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
希望这能为其他人节省时间。
这篇帖子提到,Android Studio的“添加为库”功能有个bug:Android Studio:在尝试配置Google Apps Endpoints客户端库时,点击“添加为库”会出现IncorrectOperationException错误
不确定这个问题是否也适用于Eclipse。
问题是,默认情况下,生成的压缩文件只包含源代码的jar包,而不是你可以在Android应用中使用的实际编译好的库jar包。
解决方法如下:
在你的后端API文件夹中(也就是和app.yaml文件在同一个地方),生成客户端库,方法是将其作为一个gradle库来生成,命令如下:
<gae-sdk-path>\endpointscfg.py get_client_lib java -bs gradle helloworld_api.HelloWorldApi
现在你会得到一个helloworld-v1.zip文件。解压这个文件(可以在这里解压,或者在一个方便的地方,比如~/temp)。
这会创建一个名为helloworld的文件夹,里面应该有一个build.gradle文件和一个src文件夹。
在这个文件夹中使用“gradle install”来构建你的客户端库。
将
build/libs/helloworld-v1-1.X.X-SNAPSHOT.jar
复制到你的Android应用的libs文件夹中。在Android Studio中右键点击并选择“添加为库”来将其添加为库。
现在你的类应该可以正确解析了。
第4步应该会将刚构建的客户端库安装到你的本地maven库中。你可以按照你解压的helloworld/文件夹中的readme.html里的说明,直接与Android应用的gradle构建系统集成,而不是手动复制你构建的jar包。