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

8
我在使用Google Cloud Endpoints时遇到了困难。我在GAE上运行有一个Python endpoints项目,并且在使用API explorer时它能够完美地工作。然而,我无法正确地生成客户端库并在我的Android应用程序中使用它。我尝试了许多示例项目,但每次都遇到同样的问题:我无法导入和使用客户端库中的模型类。
以下是我正在进行的操作(本例中我将使用helloworld api python示例:https://github.com/GoogleCloudPlatform/appengine-endpoints-helloendpoints-python
  1. Unzip the sample code
  2. Generate the client library by navigating to folder and running

    <gae-sdk>\endpointscfg.py get_client_lib java helloworld_api.HelloWorldApi
    
  3. Unzip the generated folder and copy into root of project in eclipse

  4. In Eclipse add "your_app_id_appspot_com-helloworld-v1-20140310110152-java-1.17.0-rc-sources.jar" to build path (Right click the JAR> Build Path>Add to Build Path)

目前,我能导入 com.appspot.your_app_id.helloworld.model.*,但无法导入 com.appspot.your_app_id.helloworld.model.Greeting

有谁能够解释一下这是怎么回事吗?我尝试了许多不同的方法来解决这个问题,但每次都遇到了相同的问题。

非常感谢,

汤姆


我在Eclipse(带有ADT)中也遇到了同样的问题。你找到解决方案了吗?如果是,请分享一下。 - gsinha
我已经为此问题提交了一个Google缺陷报告。如果您也认为这是个问题,可以给它点赞(这样Google可能会更快地修复它)。https://code.google.com/p/googleappengine/issues/detail?id=10799 - gsinha
不好意思,我在这个问题上遇到了完全的死路,最终把后端切换到Java花费了几天的工作时间。感谢您向Google提出此问题。 - Tom
感谢Tom的更新。我希望Google能尽快修复它,因为这是一个关键库中的重大漏洞。我不知道为什么他们还没有发布更新。这很遗憾。 - gsinha
有人在Eclipse中成功运行了吗?我也在无尽的挫败感中走投无路了数个小时。 - Jaime Ivan Cervantes
3个回答

4
问题在于默认情况下,生成的zip文件只包含源jar文件,而不是实际编译的库jar文件,这些库jar文件可以供您的Android应用程序使用。
以下是解决方案:
1. 在您的后端API文件夹中(与您的app.yaml位于同一位置),将客户端库生成为gradle库,如下所示: \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文件。

0

我已经解决了这个问题,并在下面提供了解决方案。

我从Eclipse切换到Android Studio Preview 0.4.6,这有助于消除一些Google库导入问题(通过build.gradle配置)。我觉得这不是我之前使用的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

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

你能否使用他们的工具生成自己的库并使其正常工作?很遗憾,这个答案对我在尝试使用自己生成的库时没有帮助。Google似乎失踪了... - k_day
@k_day 是的。我使用了通过以下命令生成的库:C:\gaurav\coding\python\androidbackend1>"C:\Program Files (x86)\Google\google_appengine\endpointscfg.py" get_client_lib java -o . helloworld_api.HelloWorldApi - gsinha

0

这也是我的一个问题!虽然我已经解决了其他问题,但我仍然无法在Android Studio或Eclipse中访问类,因此我认为我正在错误地生成端点客户端库。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接