我有一套功能(類),我想與我正在爲iPhone和Blackberry(Java)構建的應用程序共享。有沒有人有這樣做的最佳做法?適用於iPhone和BlackBerry的共享庫
回答
這是不可能的,據我瞭解你的問題 - iPhone和Java的二進制格式不兼容 - 甚至對於黑莓設備上的本地庫。
這不像是爲OS X構建的,您可以非常容易地使用Java,而iPhone不支持Java。
最好的想法可能是在Objective-C中構建您的庫,然後將其移植到Java,這比通過其他方式更容易。如果您爲Objective-C編程並確保您的代碼沒有內存泄漏 - 那麼這些更改並不複雜。
如果你把你的類的結構相同,那麼你應該找維修簡單得多 - 修復在Java中的錯誤,你應該發現很容易檢查在ObjC方法等
同樣的錯誤希望這會有所幫助 - 抱歉,這不是所有的好消息。
正如Grouchal提到的那樣 - 您無法在兩個平臺之間共享應用程序的任何物理組件。但是,如果您仔細將其分解爲高度分離的圖層,則應該可以共享應用程序的邏輯設計。這仍然是一個巨大的勝利,因爲邏輯應用程序設計可能佔您開發工作的很大一部分。
您可以嘗試將自己的界面中使用的特定於平臺的API(iPhone SDK等)部分包裝起來。這樣做可以有效地隱藏特定於平臺的庫,並在處理平臺差異時使您的設計和代碼更易於管理。
使用此功能,您可以編寫核心應用程序代碼,使其在任一平臺上看起來都非常相似 - 即使它們是用不同語言編寫的。我發現Java和Objective-C在概念上非常相似(至少在我使用它的級別),並且期望能夠實現至少與以下級別的對等性:
- 幾乎相同的一組Java和Objective-C類具有相同的名稱和職責
- 的Java/Objective-C類具有類似的命名方法
- 的Java/Objective-C的方法具有相同的責任和邏輯實現
僅憑這一點使應用程序更易於理解a跨平臺。當然,代碼在邊緣看起來總是非常不同 - 也就是說當你開始處理視圖,線程,網絡等時。然而,這些問題將由你的API包裝器處理,它們一旦開發出來就應該有相當靜態的接口。
如果您稍後開發者需要將更多應用程序交付給這兩個平臺,您可能也會受益,因爲您可能會發現可以重用或擴展您的API包裝器。
如果你正在編寫一個客戶端 - 服務器類型的應用程序,你應該儘可能地在你的服務器上儘可能地保持邏輯。儘量減少設備上的額外業務邏輯。您可以將設備視爲視圖層越多,您就必須完成更少的移植操作。除此之外,在所有項目中遵循相同的命名約定和包結構有很大幫助,特別是對於您的框架代碼。
用於BlackBerry和iPhone的UI API和可用性範例非常不同,以至於在大多數情況下,在應用程序之間直接移植這種邏輯是不可能的。在我看來,最大的錯誤是試圖將爲一個移動平臺設計的用戶體驗移植到另一個平臺上。人們與黑莓手機和iPhone手機的互動方式非常不同,因此準備爲您想部署的每個移動平臺重新調整您的用戶體驗。
希望這是有幫助的。
你是對的大錯,並確保用戶交互在每個平臺上一致。 有關在服務器上放置儘可能多的代碼的評論並不總是有效 - 它依賴於具有良好連接的用戶。我認爲如果你的解決方案是讓服務器盡一切努力去寫一個web應用程序。如果您打算使用本地應用程序,那麼如果用戶需要服務器執行核心操作並且用戶沒有信號,則用戶體驗不佳。 – Grouchal 2009-06-19 16:07:31
可以編寫適用於BB10 Native應用程序和iOS應用程序的C++代碼。 XCode需要將C++文件看作ObjectiveCPP代碼。
我目前在業餘時間從事這樣的工作。我還沒有完成足以顯示或知道它是否真的可能,但我還沒有跑到任何路障。
您需要遵守紀律才能編寫出具有平臺特定功能的,具有抽象的良好跨平臺代碼。
我的一般模式是,我有「班Foo」做跨平臺的東西,而「班FooPlatform」做特定平臺的東西。 「Foo」類可以調用類「FooPlatform」,它抽象出任何特定平臺。
原始的跨平臺代碼本身不能編譯。 獨立的BB10和XCode項目在其各自的IDE中創建。 每個項目都實現了一個很小的(幾十行)「class FooPlatform」,並引用了原始的跨平臺代碼。
當我得到的東西的工作,我可以證明我將張貼在這裏再次...
- 1. 適用於Android和網站的數據庫共享
- 2. 適用於iPhone,Android和Blackberry的移動開發
- 3. 適用於BlackBerry和iPhone的測試自動化工具
- 4. 適用於Iphone和Blackberry的FM調諧器API
- 5. 適用於iPhone和Android的PHP Graph庫
- 6. 適用於iPhone的JSON庫
- 7. 適用於iPhone的JSON庫
- 8. 共享iPhone靜態庫
- 9. 適用於iOS的屏幕共享SDK
- 10. 適用於BlackBerry的SDK
- 11. 用於多個文件適配器的共享Idemponent存儲庫
- 12. PHP代碼適用於共享主機,但不適用於Xampp
- 13. FaceBook共享不適用於android
- 14. 共享點是否適用於php
- 15. Facebook共享不適用於Safari或Chrome
- 16. Map Routing - 適用於Android 1.5和Blackberry 5.0
- 17. 用於鏈接的可共享和不可共享庫之間的差異
- 18. Maven和共享庫
- 19. Jni和共享庫
- 20. C++ MinGW共享庫問題(僅限Windows,適用於Linux)?
- 21. GHCi不適用於FFI導出聲明/共享庫
- 22. 適用於iPhone和Blackberry Web應用程序的移動用戶界面
- 23. 適用於64位Windows和「無共享密碼」的OpenSSL
- 24. 將Autotools用於新的共享庫
- 25. 用於iPhone和Objective-C的共享/排他鎖機制?
- 26. 關於iPhone SDK中的文件共享?
- 27. 問題關於共享庫
- 28. 使用共享數據庫開發Android和iPhone應用程序
- 29. dig和nslookup的共享庫
- 30. MonoDroid和MonoTouch的共享庫
這確實幫助。我編輯了我的文章一點。我更多地尋找一種最佳實踐,而不是共享二進制文件的能力。內存泄漏指導正是我正在尋找的信息。 – 2009-06-19 14:24:10
我同意teabot - 任何你可以做的設計類似的將是一個巨大的勝利。 – Grouchal 2009-06-19 15:02:29