2014-01-26 56 views
0

我們正在嘗試爲所有移動平臺(Android,iPhone,Windows phone)創建應用程序。我們將使用每種平臺的本地開發語言(Java,Objective C,C#)構建用戶界面。對於中間層(DataAccess Layer和業務邏輯層),我們計劃在所有平臺上使用C++。 我們將使用像Curl,sqlite3,libzib這樣的庫。所以我認爲一個好的解決方案是創建兩個獨立的C++項目(DataAccess和業務邏輯)並引用我們需要的庫。首先我們將從Android開始,所以我將使用Android NDK將這兩個項目作爲預建靜態庫加入,並在jni文件夾中添加一些他們將在UI和業務邏輯之間進行通信的方法。後面我們會爲其他兩個平臺做同樣的事情。因爲我是很新的C++我想提出以下幾個問題:如何使用通用C++業務邏輯和數據訪問層構建跨平臺移動應用程序

  1. 你認爲這在理論上是否行得通呢?

  2. 我們將要面對什麼問題(例如調試,在不同的操作系統中使用Curl)?

  3. 是否有任何使用相同方法的開源移動項目?

+0

據我所知[Qt Mobile Edition](http://qt.digia.com/Product/Qt-for-Mobile-Development/Qt-Mobile-Edition/)提供了一個非常好的跨平臺移動應用程序平臺。一般來說,你的問題是否爲SO的主題(請參閱我的近距離投票)。 –

回答

1

你認爲這在理論上是否行得通呢?

是的,我已經爲Android和iOS編寫過應用程序,它使用兩種平臺上用C++編寫的數據訪問層。我編寫了Android版本,一位同事編寫了iOS版本。它不是開源的,所以我不能給你看代碼。

我們要面對哪些問題(例如調試,在不同的操作系統中使用Curl)?

調試共享的C++代碼可能是一個痛苦的Android的屁股。我從來沒有得到過在Windows上工作的調試器。如果我不能在iOS上重現和調試,我通常會認真閱讀我的代碼並將消息打印到LogCat。通常這隻會影響鏈接C++業務邏輯和原生UI代碼的JNI層。

您可能需要爲平臺單獨構建第三方庫。 Curl有爲每個平臺構建它的指示,所以不應該太麻煩。

除了學習JNI,我有最大的問題是,應用程序必須看起來相同(或非常相似),每個平臺上。我建議您考慮Qt Mobile Edition作爲 建議,但目前它不支持Windows手機。不過,您至少可以爲您的三個平臺中的兩個平臺編寫一個用戶界面 - 而且您的共享業務代碼仍然可以重複使用。我們正在開始第二個應用程序的過程中,Qt絕對是我們最好的選擇。我認爲我們不想重複嘗試在使用非常不同的API的兩個平臺上提供相同功能的經驗。

有沒有使用相同的方法任何開源移動項目?

我不知道任何副手,但我相信你可以谷歌它。

+0

對於Android來說,你認爲哪種策略更好? 1.在jni中包含curl,libzip等庫,作爲獨立的靜態庫2.將它們包含爲業務邏輯C++項目的引用,然後將其作爲預建靜態庫包含到android.mk – Stam

+1

我不能說哪個是「更好」,因爲我不知道。經過雙重檢查,我們實際上在我們的第一個應用中做了一些,但只有兩個依賴。對於我們計劃的下一個應用程序,只需構建一組預構建器並將它們包括在靜態庫中,但隨後我們會有更多的依賴關係,並且用這種方式管理似乎更容易。爲不同平臺構建每個平臺都由獨立的構建腳本進行管理,這些構建腳本利用了獨立的工具鏈。 –

相關問題