2011-09-26 39 views
38

我們公司正在揀選原生Android/iPhone開發和一些跨平臺解決方案,特別是Marmalade SDK(前Airplay SDK)。本機Android/iOS開發與Marmalade SDK

我們是一家計算機視覺公司,這意味着我們需要低級別的相機設備。而且,我們的應用程序在計算上花費很大,這意味着我們傾向於擠出可用的每一點處理能力。

我們的團隊在Objective-C和Java(或C)方面都有足夠的經驗來提供平臺特定的解決方案。然而,我們的主要重點始終放在C++上,因此我們希望防止團隊分裂,而採用跨平臺解決方案。

我們最大的擔憂是,選擇Marmalade會犧牲處理速度(主要關注點),或者通過複雜化對攝像機幀緩衝區的低級訪問來嚴重延長開發時間。

所以我的問題是,除了明顯的優點之外,還有Marmalade SDK對處理器密集型視頻處理應用程序的特殊限制。

+1

我不確定關於果醬,但如果他們不給你直接訪問本地API(如工作燈),它不會將您的代碼轉換爲本地API,計算軟件應該選擇本地API,大部分共享代碼確實可以是C++,現在andriod代碼甚至可以擁有本地Activity,因此只有你的包裝應用程序應該是java,所以我會選擇本地代碼。 – codeScriber

回答

99

我已經在我的獨立遊戲公司使用果醬/ Airplay將近兩年了。對我而言,這是一場勝利,因爲我只是一名程序員,而且我幾乎可以使用MS Dev Studio(這是我最喜歡的開發環境)在Windows中完成所有工作,並且因爲它使我不必處理大量特定於平臺的細節,尤其是各種開發工具,可能會讓我花費大量時間花在遊戲內容上。

速度不會是果醬的問題。你的C++代碼本身運行。此外,訪問相機和其他功能應該不是什麼大問題;它已經提供或可以使用擴展SDK添加,這是非常簡單的使用。

果醬是一種成熟的產品,該公司對於快速解決問題非常有幫助,即使對於獨立開發者來說也是免費使用該產品的。除了跨平臺性之外,它還內置了一些很好的工具,例如內存泄漏跟蹤器,日誌記錄系統,圖形分析工具等。

我對橘子醬有一些不足之處。

  1. 儘管理論上任何API或第三方SDK都可以通過擴展系統訪問,但實際上您需要的東西可能還不存在。舉例來說,許多開發人員目前正在努力將分析套件Flurry集成到一起,這對於一些人來說是一個挑戰。這種情況與許多其他第三方SDK類似;如果您正在進行Objective-C開發,它們可能只是一些整合,但通過Marmalade可能會更困難。

  2. 有些事情是不太自然的,因爲你操作的跨平臺層。我的一些例子已經:

    • 我有麻煩我的閃屏(應用程序啓動屏幕)到兩臺iOS和Android所有屏幕尺寸正常顯示。在Marmalade應用程序本身的設備加載和Marmalade加載應用程序代碼的步驟之間進行轉換時,很難讓它們在沒有閃爍,短暫中斷時間或調整圖像大小的情況下顯示。

    • 果醬強加了一個非常簡單的內存模型,在那裏你得到一個固定的堆,並且所有的內存分配都是通過Marmalade完成的。從系統的角度來看,該應用程序只有一個大塊(或幾個大塊)的內存。這有一些優勢,但我有問題與iOS模型的平方,例如,接收內存警告,並期望拋棄任何不必要的資源。這似乎是「一刀切」最終實際上失去了一些關鍵功能的情況。

    • 您可以使用擴展管理器和一些其他方法來顯示原生UI元素,但是集成大量的本機外觀UI可能是一個挑戰。因此,如果您的應用具有遊戲風格,用戶可以處理非標準按鈕等,那很好,但如果您預計需要重要的本地用戶界面,則難度更大。 [編輯]最近的Marmalade版本增加了一個原生的UI框架,可以讓你以一種通用的方式指定標準的UI元素,然後使用相應的窗口小部件來實現設備。我沒有用過,但看起來相當全面。]

  3. 如果遇到問題,它往往並不清楚它是否是一個通用的操作系統問題或果醬的問題,也可以是孤獨試圖找到幫助。例如,我最近在iOS和Android上添加了應用內購買到我的遊戲。 IAP是具有挑戰性的,即使沒有額外的SDK層,也有很多特殊情況需要處理。就我而言,我的情況是,我的應用程序被蘋果拒絕了一個小問題,而當它處於被拒絕狀態時,我的應用程序內購買也處於「拒絕」狀態(儘管沒有任何關於IAP本身;這只是蘋果流程的一個怪癖)。當我試圖對應用內購買功能進行迴歸測試時(當我提交針對此非應用內購買相關問題的修復)時,遊戲實際上正在崩潰,而不是獲得適當的錯誤結果。我能夠確定崩潰不在我的遊戲代碼中,所以它可能是操作系統(不太可能)或Marmalade中間層,用於處理應用內購買回調(這就是它的結果[更新11/28/2012:據報道,Marmalade最近在SDK更新中修復了這個問題])。

    因此,在這種情況下,您可以嘗試使用Stack Overflow來獲得幫助,但是真的沒有人會幫助您,所以您依賴Marmalade團隊來回答您的問題。正如我所說的,他們在這方面做得非常好,但是它無法與來自全球常規iOS程序員社區的Stack Overflow幾乎即時響應相抗衡。所以我會說這最後一個是我使用像果醬這樣的系統最關心的問題。它可以節省您的時間,而不必提前加速各種平臺SDK的細節,但是當遇到問題時,您是Marmalade團隊(或友好的Marmalade社區成員)的「擺佈」,以重新回到你有一個答案。 (請記住,我正在寫作一名免費的獨立開發者,他們只是獲得問題解決方案的標準優先權,您可以付費以保證快速解決方案。)對於我個人而言,很難繼續回到我的製作人手中,說:「我正在等待這個Marmalade傢伙的回答。」

    (問題3的另一個例子是,直到最近在某些Android設備上出現延遲聲音效果的問題,這是一個Marmalade問題,他們最終解決了這個問題,但花了一段時間,基本上沒有什麼可以在此期間做的。)

記住,(其它反應所指出的那樣),即使沒有果醬你仍然可以擁有大量在任iOS或Android用C代碼庫++的。

儘管上面列出了很多潛在的問題,但我是Marmalade的粉絲,我很欣賞公司爲我提供的所有免費服務。當涉及到其他平臺時,該工具真的非常出色,否則您從來不會打擾其他平臺,例如(對於我)bada或PlayBook。如果你想讓自己的生活變得更加艱難,你可以從舒適的PC和開發人員工作室(或者使用xcode的Mac)部署到各種設備。他們擁有的模擬器工具非常棒,只有少數實例需要在設備本身上進行調試;一般來說,如果它在模擬器上工作,它就可以工作。 IdeaWorks面臨着巨大的挑戰,他們在所有這些平臺上(即所有重要的設備,除Windows Phone之外的所有這些功能(即基本上移動設備上提供的所有功能)都做得很好) 7,因爲它目前不允許本地代碼)。它只是附帶一些警告。

+0

非常感謝您的精心解答。我絕對佩服果醬目前可以做的事情。感謝你,我現在也知道在我的公司內使用它有什麼意義。 – Abai

+3

優秀的答案,感謝您花時間給出適當的客觀體驗。 – trickdev

+0

如果您使用Marmalade的Camera Capture API(使用操作系統的默認照片應用程序),您會沒事的。對於更高級的用法,您可以使用Camera API,但間接層可能會限制您對本機訪問相機的操作;特別是(在我的情況下)預覽速度較慢:在我的Galaxy Nexus中,NUI照片預覽明顯慢於本機相機應用程序。我的策略是使用Marmalade EDK使用android java api創建預覽表面,並通過回調將圖像發送回本地代碼。爲我工作好,但它是額外的工作... – ptdev

1

我會使用MoSync Android/iOS,但我會說,因爲我在MoSync工作。

但平心而論,我更喜歡MoSync Camera API。

如果你真的想擠出所有的處理能力,你應該使用ASM。

/託尼

+0

我們確實求助於一些內聯asm,然後 – Abai

2

據我可以從Android開發的告訴你: 在Android本身的攝像頭API似乎是一個小馬車(例如:2.1之前沒有任何解決方案,使相機在人像所示模式而不加擾圖像)。 上面的另一個抽象層可能會更好(無論在可訪問性,功能性等方面)還是更糟糕。它爲舒爾做了什麼:它竊取了您自己的應用程序可能需要的資源。

2

果醬提供了一個極好的本機擴展框架

http://www.madewithmarmalade.com/marmalade/features/extensions-development-kit

這最終意味着你可以直接跳轉到一個本地實現任何特定的功能。您仍然保留主應用程序跨平臺開發的核心優勢。

同樣在android上,因爲marmalade使用android NDK,您的C++代碼用於處理數據將比對應的android Java代碼運行得更快。

即時通過Marmalade製作遊戲以及擴展和原生代碼速度,使我非常有信心能夠提供至少以及「原生」應用程序。

9

我對Marmalade的首席技術官有偏見......但如果您的關鍵要求是(1)相機訪問和(2)「擠出可用的每一點點處理能力」的能力,那麼Marmalade是一個偉大的選擇。

Marmalade將您的C/C++編譯爲本機ARM(或x86)指令...無需轉碼,無需虛擬機。使用現有的C/C++代碼非常容易,幾乎所有的C/C++標準庫都受支持,等等。您可以在項目中使用ASM代碼。此外,無論您在何種平臺上部署(無論您是純粹在Windws上編譯/測試/部署到iOS),您都可以在Windows或Mac上進行所有開發。

+0

Tim Closs只是一個問題: 你說:「(是的,你甚至可以純粹在Windws上編譯/測試/部署到iOS)」。我可以在Windows機器上將我的應用程序部署到Apple嗎?我不需要Mac將應用程序發送到App Store嗎?謝謝 – user413185

+0

我不能正式回答Marmalade,但是在整個過程中我使用我的Mac的一件事是使用AppLoader實際提交應用程序。 (AFAIK沒有適用於Windows的AppLoader,但是Windows有一個很好的iPhone配置實用程序。) –

+0

Tim,我們喜歡果醬,並相信它的未來。它具有良好的性能和圍繞它的深層工程工具(我們實際上已經爲它的git貢獻了OpenCV)。但是現在我們擔心在使用相機時出現間歇性應用程序崩潰,而其他人報告的情況也是如此。你們可能會致力於解決這個問題嗎?這對我們至關重要,我相信每個人。一些線程重新發布: http://tinyurl.com/7mcd5y5 http://tinyurl.com/7apzx4y http://tinyurl.com/czklmr9 – Lior

0

果醬並不壞,我在2013年使用它。一些錯誤,一些煩惱(固定內存池),但總體來說不是一個糟糕的經歷。

唯一真正令人失望的是缺乏對Linux的支持。我看不到Marmalade傢伙如何支持像Blackberry這樣的晦澀難懂的平臺,但不支持Linux;這個不成立。也許這會隨着Steam OS(一個基於Linux的,以遊戲爲中心的平臺)的成熟而發生變化,儘管Steam操作系統現在並沒有爲其他操作系統帶來的東西帶來很多好處。

+0

謝謝你回答和貢獻堆棧溢出,但請再看看這個問題,因爲它根據[help/on-topic],這似乎是無關緊要的。回答題外話問題看起來好像可以問這樣的問題 - 事實並非如此。題外話題可能會被封閉,然後被刪除,這會使你的貢獻無效! –