无法在Android项目中导入google cloud端点客户端库类

时间:2014-03-10 14:35:29

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

我无法使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&gt;构建路径&gt;添加到构建路径)

  5. 在此阶段,我可以导入com.appspot.your_app_id.helloworld.model.*但我无法导入com.appspot.your_app_id.helloworld.model.Greeting

    任何人都可以了解这里发生的事情吗?我已尝试了许多不同的方法来使其工作,但每次都有同样的问题。

    非常感谢,

    汤姆

3 个答案:

答案 0 :(得分:4)

问题在于,默认情况下,生成的zip文件只包含一个源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. 右键单击/ add-as-library,将其添加为Android Studio中的库。

  7. 您的课程现在应该正确解析。

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

答案 1 :(得分:0)

这篇帖子说Android Studio的添加为库存在错误:Android Studio: IncorrectOperationException when 'Add as Library' is clicked whilst trying to configure Google Apps Endpoints client libraries

不确定它是否适用于Eclipse。

答案 2 :(得分:0)

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

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

我能够解决导入问题。需要将官方Google文档上的教程段上的代码同步。

解决方案是大致进行以下更改:

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

希望这为其他人节省时间