將世界迷霧移植到 Android 要做的工作

Ollix
世界迷霧
Published in
3 min readNov 29, 2017

早在三年半前剛開始設計世界迷霧2的時候,就已經預想好以後要可以移植到 iOS 以外的平台了。如果你一直都有追踨我們粉絲頁的話,或許還記得約在三年前,我們就公告了會採用自行設計的跨平台開發架構(傳送門),除了這個比較主要的框架,迷霧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 來完成。

另外迷霧還會用到不同平台原生的函式庫,像是 Dropbox 及 Google Maps 的支援等,在 iOS 平台,這些原生函式庫是用 Objective C 寫成的,迷霧的主程式必須串接 C++ 及這些 Objective C 的原生函式庫。而在 Android 平台,這些原生函式庫將會是用 Java 或 Kotlin 寫成的,也就是我們必須開發串接 C++ 及這些 Java/Kotlin 原生函式庫的程式碼才有辦法調用這些功能。

另外還有一些大大小小的問題,像是儲存檔案的位置,如何去取得包在 APP 裡的檔案等等,基本上許多看似簡單的小東西,在 iOS 跟 Android 的使用邏輯都大不相同,這些都是需要特別處理的。最需要花時間的,大概將會是定位功能的實機測試,如何能儘可能的記錄路徑,但又要過濾掉不準確的座標,這將會需要長時間的上路測試來調整參數。

--

--