2012-11-22 27 views
2

我寫的Android應用利用的是微軟Azure雲的Azure的Android的Java客戶端

  • 頁斑點(Blob服務)
  • 關係數據庫表(SQL Azure中)
  • 隊列

一切看起來不錯,但我打了一個非常堅實的技術磚牆,可能會阻止我們使用AZURE;即Microsoft Java Azure SDK使用JAXB。

  1. JAXB不是由Android提供的(如果你想將其捆綁是非常大的)
  2. Dalvik虛擬機不能夠執行在JAXB反射調用
  3. 不能被編譯成DEX爲JAXB用途javax軟件包結構,使用--core-library幾乎可以肯定可以保證失敗。

其他Azure中的Java SDK Maven依賴其受保護的javax封裝結構還定義了兩類:

  • javax.xml.bind中的JAXB API
  • javax.inject javax.inject
  • COM .sun.jersey球衣芯
  • STAX STAX-API
  • javax.activation中激活
  • javax.mail郵件

這在我看來,這有效地防止使用Azure的服務來支持Android應用程序(對我來說)作爲寫我自己的Android友好的API詢問Azure是超出了本項目的範圍。

有沒有人有通過其他機制在Android上使用Azure服務的經驗?

回答

3

我建議躲在最湛藍的特定功能背後託管在Azure中WebRole(使用WCF)RESTful Web服務。 Here是一個包含設置Azure以提供基本RESTful Web服務的教程。然後,您的Android客戶端可以使用HTTP/JSON/XML以符合標準的方式與Azure進行通信。

你的目標就是讓Web服務與後端Azure的組件進行通信,而不是Android客戶端直接與他們溝通,是這樣的:

的Android - > Azure的基於REST的WebRole - >斑點,SQL數據庫,隊列中,Worker角色

雖然在某些情況下,你可能希望你的Android客戶端直接與Blob存儲(通過斑點REST接口)進行通信

的Android - >斑點
&
的Android - > Azure的基於REST的WebRole - >斑點,SQL數據庫,隊列,Worker角色

如果WebRole是你可以用更便宜的基於REST的Azure的網站取代它成爲覆蓋this tutorial太貴了。

與您直接與後端Azure組件通信的其他方法需要考慮的事情是,您的Android客戶端需要存儲您的Azure帳戶密鑰,這與將您的帳戶密碼交給使用Android客戶端的人員基本相同...即一個壞主意。

+0

優秀的建議。我同意:) – paulsm4

+0

您對賬戶密鑰的評論特別有幫助,我曾打算將它與Android應用內付費公鑰一起混淆,但是您認爲Azure賬戶密鑰泄露的安全隱患要嚴重得多。 – Syntax

+0

查看你的建議之後,這絕對是解決SDK問題的好方法,並且通過將我的帳戶密鑰移動到服務器端代碼(而不是在客戶端上混淆它)來顯着提高安全性。謝謝羅布。 – Syntax

0

1)Microsoft不使用JAXB。 Java服務器和客戶端使用JAXB來使用SOAP Web服務。

一種替代方法是嘗試不同的SOAP庫。例如:

2)另外,也許是更好的辦法,可能會調用天青與REST,而不是SOAP:

+0

的微軟Azure Java SDK中對JAXB的直接依賴 - https://github.com/WindowsAzure/azure-sdk-for-java/blob/master/microsoft-azure -api/pom.xml – Syntax

+0

道歉,它是SDK所依賴的jaxb-api元素,其大小隻有100kb左右。 – Syntax

+0

由於這裏討論的原因,他們可能會使用JAXB:http://176.34.122.30/blog/2009/01/12/rest-web-services-with-jaxb-jax-rs-and-sun-jersey/ – Syntax

0

目前,Windows Azure SDK for Java不支持Android。但由於它是開源的,如果你願意,你可以自己做很多。源代碼是在

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

+0

Windows Azure最近宣佈了Azure的移動服務功能(仍然是預覽版)。對於任何希望將Azure用於其移動應用程序的開發人員來說,這應該會大大簡化。我建議這是一個適合大多數中小型應用的好地方。 – Syntax