早在三年半前剛開始設計世界迷霧2的時候,就已經預想好以后要可以移植到 iOS 以外的平臺了,于是當時就已著手設計了一個可以跨平臺開發的框架,而迷霧2就是基于這個框架開發而成的,除此之外,迷霧2底下還有幾個自主開發的子計劃,以及迷霧2本身的主程式,基本上全部都是用 C++ 開發而成的,包含整個迷霧2的 UI 系統都是自行設計的,完全不依賴 iOS 的 UIKit。以上翻譯成中文的意思就是,原則上迷霧2超過九成的程式碼都可以直接在各個平臺運行,迷霧2甚至可以在不改一行程式碼的情況下,直接在各個平臺都顯示出一模一樣的畫面,并擁有一模一樣的操作手感。
那我們究竟還需要移植什么東西呢?雖然整個迷霧的接口操作都不需重寫,但每個平臺都有一些自己的特性,這也是要將迷霧移植到其他平臺最主要的工作,其中大部份會落在我們自己設計的跨平臺開發框架 moui。這三年來 Android 發展的很快,也改變了許多東西,像是 Android 官方主要的編程語言在今年從 Java 變成了 Kotlin。當年選擇了 Google 的 GYP 做為所有程式的編譯工具,透過 GYP 我們可以直接生成 iOS 及 Android 編譯所需的相關檔案,然而現在 Google 已經舍棄了 GYP,Android 要使用 C 或 C++ 程式碼的話,必須改用 Gradle 及 CMake 來完成。
另外迷霧還會用到不同平臺原生的函式庫,像是 OneDrive 及微博的支持等,在 iOS 平臺,這些原生函式庫是用 Objective C 寫成的,迷霧的主程式必須串接 C++ 及這些 Objective C 的原生函式庫。而在 Android 平臺,這些原生函式庫將會是用 Java 或 Kotlin 寫成的,也就是我們必須開發串接 C++ 及這些 Java/Kotlin 原生函式庫的程式碼才有辦法調用這些功能。
另外還有一些大大小小的問題,像是儲存盤案的位置,如何去取得包在 APP 里的檔案等等,基本上許多看似簡單的小東西,在 iOS 跟 Android 的使用邏輯都大不相同,這些都是需要特別處理的。最需要花時間的,大概將會是定位功能的實機測試,如何能盡可能的記錄路徑,但又要過濾掉不準確的座標,這將會需要長時間的上路測試來調整參數。
從 11 月 22 日起,我已經在 moui 上新建了一個 android branch 在密集進行移植工作,當這個 branch 完成之時,就表示迷霧安卓版的公測指日可待了,對程式開發有興趣的朋友歡迎追踨我們的GitHub:https://github.com/ollix/moui/commits/android