2

我正在编写一个利用 Microsoft Azure 云的Android 应用程序

  • 页 blob(Blob 服务)
  • 关系数据库表 (SQL Azure)
  • 队列

一切看起来都很棒,但是我遇到了一个看起来很坚固的技术砖墙,这可能会阻止我们使用 AZURE;即,Microsoft Java Azure SDK 使用 JAXB。

  1. Android 不提供 JAXB(如果您想捆绑它,它会非常大)
  2. Dalvik VM 无法在 JAXB 中执行反射调用
  3. 由于 JAXB 使用 javax 包结构,因此无法编译为 dex,使用 --core-library 几乎可以肯定会进一步保证失败。

其他 Azure Java SDK maven 依赖项也在受保护的 javax 包结构中定义类:

  • javax.xml.bind jaxb-api
  • javax.inject javax.inject
  • com.sun.jersey jersey-core
  • stax stax-api
  • javax.activation 激活
  • javax.mail 邮件

在我看来,这实际上阻止了使用 Azure 服务来支持 Android 应用程序(对我而言),因为编写我自己的 Android 友好 API 来询问 Azure 超出了该项目的范围。

有没有人通过其他机制在 Android 上使用 Azure 服务的经验?

4

3 回答 3

3

我建议将大部分 azure 特定功能隐藏在托管在 Azure WebRole 上的 RESTful Web 服务(使用 WCF)之后。是一个教程,介绍了如何设置 Azure 以提供基本的 RESTful Web 服务。然后,您的 Android 客户端可以使用 HTTP/JSON/XML 以符合标准的方式与 Azure 进行通信。

您的目标是让 Web 服务与后端 Azure 组件通信,而不是 Android 客户端直接与它们通信,例如:

Android -> Azure RESTful WebRole -> Blob、SQL DB、队列、工作角色

尽管在某些情况下您可能希望您的 Android 客户端直接与 Blob 存储进行通信(通过 Blob REST 接口)

Android -> Blob
&
Android -> Azure RESTful WebRole -> Blob、SQL DB、队列、工作角色

如果 WebRole 太贵,您可以用本教程中介绍的更便宜的 RESTful Azure 网站替换它。

与您直接与后端 Azure 组件通信的预期方法需要考虑的其他事项是,您的 Android 客户端将需要存储您的 Azure 帐户密钥,这与将您的帐户密码交给使用您的 Android 客户端的人基本相同......即一个坏主意。

于 2012-11-23T00:04:32.600 回答
0

1) 微软不使用 JAXB。Java 服务器和客户端使用 JAXB 来使用 SOAP Web 服务。

一种替代方法是尝试不同的 SOAP 库。例如:

2) 另一种可能更好的方法可能是使用 REST 而不是 SOAP 调用 Azure:

于 2012-11-22T07:14:14.137 回答
0

目前,Windows Azure SDK for Java 不支持 Android。但由于它是开源的,如果你愿意,你几乎可以自己做。源代码位于

https://github.com/WindowsAzure/azure-sdk-for-java

于 2013-03-19T00:55:27.293 回答