[筆記] 跨行動平台開發相關資料Survey的心路歷程

  • 3254
  • 0
  • 2016-02-15

跨行動平台開發相關資料Survey的心路歷程

公司是在做行動裝置的App,有採用類似Hybrid的方式,就是App內嵌WebView,然後與App可以產生互動,不過我們的App主要是原生,只有部分的功能運用這樣的方式。

不過也就是這樣的方式遇到了一個麻煩,最大的問題就是Browser Core的不固定,當然目前遇到問題最大的就是Android,因為裝置種類太多、Android版本也太多, 因為這樣,所已有個Web的畫面在Android的一些機器上面會無法正確的呈現。

既然遇到問題就要想辦法解決,一開始是主管說開會時有提到不然救自己做一個render engine搭配自定義的markup檔案去做畫面,且朝向希望作一套大家都能用的目標,就是跨平台的方向前進,然後看能不寫出一個共用的函示庫給各平台去使用(例如Windows平台的.dll)
所以一開始就以Game Engine發想,因為現在許多跨平台的Game Engine可以用,一開始就要我先去看看Cocos-2d,而我就順便也查查Unity3D啦!畢竟都是Game Engine又這麼流行XD

首先跨平台這點要先確定Windows Phone可不可以支援,Unity3D是我一開始就知道支援的,查了一下Cocos2d-X也是沒有問題,不過兩者都是最起碼需要Windows Phone 8 我想理由應該很簡單就是Windows Phone 8開始可以開放C++的開發吧! 順便看了一下這兩者支援的Script languate,Unity3D是以C#為主、Cocos2d-X是以Lua為主

接下來就要看能否支援動態載入script的特性,不過可惜的是,依照我只看了一點時間的來看,兩個應該都是不行,雖然兩個都可以用sciprt去寫程式,不過看樣子這些程式碼是會compile完與你的app一起出去的, Unity3d有看到有人寫有方式可以動態載入,就是寫好script也要compile完後再給app下載,Cocos2d-x則沒有找到相關的資料

好吧~沒關係~即便是這樣應該還是有方式做到我們想做的事情,不過就先要確定是不是可以用程式碼去render UI,畢竟我們只是一般的App,主要用的是一般控制項而不會想要全部畫面都自己來繪製, 這個部分在Cocos2d-x是有原生就提供一些產生UI的api可以用,不過不多,Unity3d也是有內建的api可以產生一些UI的,還有一個 NGUI : Next-Gen UI kit 的Plugin可以使用

看到這邊大概有個簡單的考量點:
1. 用GameEngine整個App就是相當於做一個遊戲一樣,需將GameEngine綁入,會增加容量
2. 與原生的App要怎麼互動? 因為自己做render engine的話,UI的markup的檔案也是需要下載,以及UI的互動
3. 不能動態載入Script的話,要在UI做一些控制就會遇到困難
4. 不太可能寫成單獨的函示庫,必須整合在App裡面

所以只好往其他方面查,因為剛是以Game Engine為出發點,就查查看現在有哪些跨平台的Game Engine吧!
2D Cross-Platform Game Development Engines [closed] 一查下一跳,想不到有這麼多跨平台的Game Engine啊! 不過光要支援Windows Phone這點就刷掉一堆了(攤手) 另外其實這些引擎作法上應該也沒辦法解決上面說到需要考量的三個點

好吧~退而求其次~使用sciprt langue就好,Lua是知道每個平台都有他的runtime,不過聽主管說在iOS上有自己一套自己的javascript engine,可以直接就用javascript去寫code了!
所以我就好奇找找看在.NET這邊呢?結果找到了這個 Jurassic 是一套.NET下的javascript engine,酷!!看SourceCode資料夾中還有寫到Windows Phone 7,不過想到未來性的話,WinRT這邊的支援恐怕就要真的去看SourceCode或者有新來的人去porting XD 自己功力應該不足Orz

這樣...就乖乖以Lua發想去找解決方式,runtime問題確認後,另外一個重要的問題就是怎麼產生UI,查了一下資料,的確有人有寫Lua UI的一些函示庫,不過很可惜的都是Desktop的平台,移動平台的是沒有的,所以遇到這邊就又卡死了Orz 其實這邊也有上面GameEngine的第二個問題未解,要怎麼跟原生的App互動?

不死心,再去查查跨平台的Markup language有哪些
Cross-platform UI markup language for iOS, Android and WP8?
哈~還真的有人有問過這問題,大多數裡面列的沒聽過,且有幾間應該是倒了,網站都不見了,這門生意不好做啊!^^"
在裡面看到最出名的就是PhoneGap啦!不過這不是一個我們能採用的解決方式

正當快要死心的時候,想到前陣子去看Qt知道Qt現在已經可以支援開發iOS & Android,那現在是否支援WP了呢?答案是「可以」!
Supported Platforms
雖然目前是在beta的階段,不過看樣子是可以支援的!頓時又燃起了一線希望!

Qt能用的話有兩種方式
1. Qt其實裡面有自己的QtWebView控制項,那可以走老路,但用QtWebView的話就是同一個BrowserCore了!
2. 一樣自己寫render engine

經過下載最新版的Qt來簡單測試後
1. 此路不通,QtWebView這控制項在WP/Windows目前不支援,未來似乎也有其難度,其實這算是意料中的事,如果可以的話,應該就會有WinRT版本的Chrome了,雖然FireFox試圖想移植Gekco不過最後放棄(不確定原因);且Android目前也尚未支援,看來有一定的難度。(其實在htc工作的時候有看過Webkit的sourceCode,這是人生第一次看到這麼多個檔案的project XD,一個BrowserCore可不是隨便就能用好的...)
2. Well~ 這段主要是要測試UI上面是否能夠自己建立,不過我嘗試的太多,排除應該可行Android & iOS外,要測試目前是beta的Windows,不過...我想應該是在beta的關係,Qt提供的project以WinRT的專案開啟,基本上有的連compile都有困難,另外一個是目前還無法簡單的Deploy & Debug
3. 雖然貌似可以寫函示庫,不過以Android而言要使用需要動用到JNI,Windows這邊的話還不知道要怎麼樣用給C#寫的Windows App做使用

嘖~好吧~只能雙手一攤~其實Survey上面這些東西已經花了不少時間,能力不足沒辦法掌握更多進一步的訊息,但還有其他的案子要進行,只能先跟主管說目前的結果應該是建議不要這樣做為主,要做的話需要的人力應該是要找個高手進來可能比較快 ><

所以最後結果應該還是走老路,但是可能需要針對不同的Device去做產生不同的html去處理了吧?!

以上...
是整個Survey的心路歷程XD 不過其實這只是初步的看,基本上沒有寫code去嘗試,但這樣的話需要花的時間更多,所以... 有看到文章的你,如果覺得這篇文章那邊寫的有問題,非常歡迎回應跟我說,我也想要知道進一步的訊息,非常謝謝!
 

=== 同場加映:關於 Hybrid App的想法 ===

1. 每個裝置的WebView控制項真的是最大的地雷,沒事還好,遇到不能調整的可能就真的沒解(就像我本篇提到的)
2. Hybrid 需要一個能夠掌握前端技術的人,尤其是行動端,因為需要針對每個裝置(注意是裝置,不是平台,對!我指的就是Android)去調整的會 非常多、非常多、非常多 (因為很重要所以要說三次)
3. 有人力的話,就UI層每個平台自己去layout吧!將「不可視」的東西用這樣的方式我覺得完全OK