2009-06-19 81 views

回答

4

這是不可能的,據我瞭解你的問題 - iPhone和Java的二進制格式不兼容 - 甚至對於黑莓設備上的本地庫。

這不像是爲OS X構建的,您可以非常容易地使用Java,而iPhone不支持Java。

最好的想法可能是在Objective-C中構建您的庫,然後將其移植到Java,這比通過其他方式更容易。如果您爲Objective-C編程並確保您的代碼沒有內存泄漏 - 那麼這些更改並不複雜。

如果你把你的類的結構相同,那麼你應該找維修簡單得多 - 修復在Java中的錯誤,你應該發現很容易檢查在ObjC方法等

同樣的錯誤希望這會有所幫助 - 抱歉,這不是所有的好消息。

+0

這確實幫助。我編輯了我的文章一點。我更多地尋找一種最佳實踐,而不是共享二進制文件的能力。內存泄漏指導正是我正在尋找的信息。 – 2009-06-19 14:24:10

+0

我同意teabot - 任何你可以做的設計類似的將是一個巨大的勝利。 – Grouchal 2009-06-19 15:02:29

4

正如Grouchal提到的那樣 - 您無法在兩個平臺之間共享應用程序的任何物理組件。但是,如果您仔細將其分解爲高度分離的圖層,則應該可以共享應用程序的邏輯設計。這仍然是一個巨大的勝利,因爲邏輯應用程序設計可能佔您開發工作的很大一部分。

您可以嘗試將自己的界面中使用的特定於平臺的API(iPhone SDK等)部分包裝起來。這樣做可以有效地隱藏特定於平臺的庫,並在處理平臺差異時使您的設計和代碼更易於管理。

使用此功能,您可以編寫核心應用程序代碼,使其在任一平臺上看起來都非常相似 - 即使它們是用不同語言編寫的。我發現Java和Objective-C在概念上非常相似(至少在我使用它的級別),並且期望能夠實現至少與以下級別的對等性:

  • 幾乎相同的一組Java和Objective-C類具有相同的名稱和職責
  • 的Java/Objective-C類具有類似的命名方法
  • 的Java/Objective-C的方法具有相同的責任和邏輯實現

僅憑這一點使應用程序更易於理解a跨平臺。當然,代碼在邊緣看起來總是非常不同 - 也就是說當你開始處理視圖,線程,網絡等時。然而,這些問題將由你的API包裝器處理,它們一旦開發出來就應該有相當靜態的接口。

如果您稍後開發者需要將更多應用程序交付給這兩個平臺,您可能也會受益,因爲您可能會發現可以重用或擴展您的API包裝器。

3

如果你正在編寫一個客戶端 - 服務器類型的應用程序,你應該儘可能地在你的服務器上儘可能地保持邏輯。儘量減少設備上的額外業務邏輯。您可以將設備視爲視圖層越多,您就必須完成更少的移植操作。除此之外,在所有項目中遵循相同的命名約定和包結構有很大幫助,特別是對於您的框架代碼。

用於BlackBerry和iPhone的UI API和可用性範例非常不同,以至於在大多數情況下,在應用程序之間直接移植這種邏輯是不可能的。在我看來,最大的錯誤是試圖將爲一個移動平臺設計的用戶體驗移植到另一個平臺上。人們與黑莓手機和iPhone手機的互動方式非常不同,因此準備爲您想部署的每個移動平臺重新調整您的用戶體驗。

希望這是有幫助的。

+0

你是對的大錯,並確保用戶交互在每個平臺上一致。 有關在服務器上放置儘可能多的代碼的評論並不總是有效 - 它依賴於具有良好連接的用戶。我認爲如果你的解決方案是讓服務器盡一切努力去寫一個web應用程序。如果您打算使用本地應用程序,那麼如果用戶需要服務器執行核心操作並且用戶沒有信號,則用戶體驗不佳。 – Grouchal 2009-06-19 16:07:31

0

可以編寫適用於BB10 Native應用程序和iOS應用程序的C++代碼。 XCode需要將C++文件看作ObjectiveCPP代碼。

我目前在業餘時間從事這樣的工作。我還沒有完成足以顯示或知道它是否真的可能,但我還沒有跑到任何路障。

您需要遵守紀律才能編寫出具有平臺特定功能的,具有抽象的良好跨平臺代碼。

我的一般模式是,我有「班Foo」做跨平臺的東西,而「班FooPlatform」做特定平臺的東西。 「Foo」類可以調用類「FooPlatform」,它抽象出任何特定平臺。

原始的跨平臺代碼本身不能編譯。 獨立的BB10和XCode項目在其各自的IDE中創建。 每個項目都實現了一個很小的(幾十行)「class FooPlatform」,並引用了原始的跨平臺代碼。

當我得到的東西的工作,我可以證明我將張貼在這裏再次...