【问题标题】:Azure Android Java ClientAzure Android Java 客户端
【发布时间】:2012-11-22 06:58:31
【问题描述】:

我正在编写一个 Android 应用程序,它利用 Microsoft Azure 云来实现

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

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

  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 服务?

【问题讨论】:

    标签: java android azure jaxb


    【解决方案1】:

    我建议将大部分 azure 特定功能隐藏在托管在 Azure WebRole 上的 RESTful Web 服务(使用 WCF)之后。 Here 是一个教程,介绍了如何设置 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 网站替换它,如 this tutorial 所述。

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

    【讨论】:

    • 您对帐户密钥的评论特别有用,我原本打算将其与 Android 应用内计费公钥一起混淆,但您是正确的,泄露 Azure 帐户密钥的安全隐患要严重得多。
    • 查看您的建议后,这绝对是解决 SDK 问题的好方法,并且通过将我的帐户密钥移动到服务器端代码(而不是在客户端上对其进行混淆)显着提高了安全性。谢谢罗伯。
    【解决方案2】:

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

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

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

    【讨论】:

    • Microsoft Azure Java SDK 直接依赖于 JAXB - github.com/WindowsAzure/azure-sdk-for-java/blob/master/…
    • 抱歉,SDK依赖的jaxb-api元素只有100kb左右。
    • 看起来他们可能因为这里讨论的原因而使用 JAXB:176.34.122.30/blog/2009/01/12/…
    • 看 - Microsoft 并没有明确承诺在竞争平台(Android 与 Windows Phone)上支持竞争语言(Java 与 C#)。但这没关系。 Azure 基于WEB SERVICES。而“Web 服务”的整个POINT 就是与语言和平台无关!因此,如果您不喜欢 Microsoft 提供的库,请探索替代方案。如果你想把所有东西都打包在一个整洁的小包中……然后使用 C# 和 Visual Studio。恕我直言...
    • 感谢您的意见。我认为 MS 实际上有很多理由支持在任何地方使用他们的 Azure 平台。微软通过使用 Azure 赚钱,他们拥有的用户越多,他们赚的钱就越多。就我个人而言,这样我就可以最大限度地提高我的产品性能并最大限度地降低前期和持续成本具体的。
    【解决方案3】:

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

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

    【讨论】:

    • Windows Azure 最近宣布了 Azure 的移动服务功能(仍是预览版)。对于希望将 Azure 用于其移动应用程序的任何开发人员来说,这将大大简化这一过程。对于大多数中小型应用程序,我建议这是一个很好的起点。
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多