七政四余Moira手機版開發(fā)難點概覽

? ? ? ? ? ? 首先是要對Moira 源代碼的各個代碼文件的作用以及項目結構要有整體的認識,簡單來說, Moira的代碼體系可分為三層:交互層、 繪制層、 計算層

1.交互層, 就是控件部分, ?如鼠標點擊、 鍵盤輸入、 列表選項、設置星盤參數(shù)對話框、日期輸入、地點選擇、批注輸入、 星盤數(shù)據(jù)管理等

2.計算層, 通過交互層拿到時間、地點以及要計算的星盤的參數(shù)后, 數(shù)據(jù)傳遞到計算層, 計算得到星盤信息, 是整個Moira的核心所在, ?計算層又可以分為兩層:1.中式信息計算層,2.天文信息計算層. ??

中式信息計算層包括命度、身度、十二宮、二十八星宿、干支計算和神煞計算等, 我一般稱為計算應用層

天文信息計算層, 包括日月五星三王四余和關鍵恒星的黃經(jīng)計算、 歲差計算、 日出日落、日月食計算等,我一般稱為計算內核層,

這兩層的一些分析, 我已經(jīng)在前面的文章分析過一點, 幾千字的分析, 文字雖多但還是計算層代碼中的冰山一角, ?可見計算層復雜度之高, 不是一般人能在短期內理解并進行二次開發(fā)的, 因此能進行Moira二次開發(fā)的人是比較少的

3.繪制層, 在經(jīng)過計算層算出信息后, 使用系統(tǒng)的畫筆接口, 在程序界面進行繪制, 將圓形星盤和星曜信息‘畫’程序界面上



了解完Moira的代碼結構后, 便可以圍繞這三層進行Moira手機版的研發(fā).


首先是Moira 安卓版(Moira Android),?

一.交互層別無他法, ?從零開始, 因為Window的控件和Android的控件是不互通的, 設計理念也不一樣, Window屏幕大, Android屏幕小, 除了需要開發(fā)者進行控件重新開發(fā)上, 還需要進行UI交互設計上的考量:

? ? ?1.筆者這里結合了筆者這邊常用的場景(經(jīng)常需要討論預測到月份、甚至到具體某一天的吉兇, 以及生時校正等), 程序主界面增加了‘ 加減月日時 ’這快捷設置時間的六個按鈕, ?

? ? 2.同時擇日場景和星盤星制設置、 立命設置是相互獨立的, 因此增加了三個按鈕‘擇日’、 ‘立命’、 ‘星盤’分別設置

? ? 3.城市數(shù)量多, 因此在城市選擇界面增加 搜索機制快速選擇城市, 和精確的地點設置, 以滿足天星擇日的需求(因為擇日用事場景一般在遠離城市的山地,)

? ? 4. 還有對星盤的輔助操作, 數(shù)據(jù)導出操作, 如何在沒有鼠標鍵盤下且在屏幕比電腦小得多的屏幕上進行交互的設計, 這些都需要進行考量

? 5.還有星盤數(shù)據(jù)導出與導入, 這些涉及到移動操作系統(tǒng)的沙盒機制, 與Window版無限制的磁盤訪問完全不同.


二. 計算層, 計算層則相對友好, ?Moira采用Java開發(fā), ?Java也可以用來開發(fā)Android, 計算層與系統(tǒng)交互控件弱相關, 直接把Moira計算層的代碼搬到Android上就能直接算出中式星盤信息、 天文信息


三、繪制層, 繪制層也是和系統(tǒng)強關聯(lián), Moira所采用的是awt下的包, Android雖然也支持用Java, 但是Android的系統(tǒng)沒有提供awt包的依賴, 因為Android有自己的一套圖形繪制系統(tǒng), 不能直接套用Java的awt包, 好在github上有人分享能解決Android依賴awt的jar, 得以在Android上快捷的適配Moira的繪制層.

但是網(wǎng)上的包awt依賴包也不能直接拿來用, 筆者對安卓awt包的代碼分析后, 修改了awt依賴包的部分源碼, 同時還在Moira繪制層補充了代碼, 以適配Android的圖形繪制接口


?筆者回顧對Moira 安卓版的適配,從零到第一版只花9天, 得益于Moira使用Java編寫, Moira在Android上的計算層和繪制層適配只要三天就能完成, 剩下6天主要是開發(fā)交互設計的時間, 因為筆者當時已經(jīng)長達五年沒有進行過Android系統(tǒng)的開發(fā), 對于Android的一些控件的使用已經(jīng)遺忘, 這七天稍微花得有點長了.



然后是在Moira 蘋果版(Moira iOS)


一、 交互層和Android一樣, 重新設計, 針對不同蘋果手機的不同屏幕尺寸適配, 自己寫交互界面, ?可以說Moira在iOS交互層的代碼與window版的Moira層交互的代碼完全不一樣, 對于iOS交互層的編寫, 涉及到數(shù)十個界面的編寫, Moira iOS交互層的代碼完全是由筆者本人自己編寫的, 具有版權, 應受到保護.


二、計算層, iOS采用objective-c或者swift編寫, 考慮到java和swift的編程理念、語法比較相像, 因此筆者用swift將Moira 中式星盤計算層(計算應用層)進行重寫, 在天文信息層,Moira采用的天文計算模塊 原本是由C語言編寫的, 網(wǎng)上有源代碼, 這部分替我省下了不少時間

天文計算模塊為C語言編寫, 計算應用層計算采用swift語言編寫, 兩者在互相調用存在一些難點, 因此將Moira 適配iOS并不是簡單的事情


三、繪制層, iOS的繪制層, 和Android的繪制層理念達到了90%的相似度, ?或許這是移動操作系統(tǒng)在圖像繪制上共有的想法吧, 安卓那套適配過Moira的代碼可以直接拿來用, 難點就是Java到Swift語法上的轉換

Moira 蘋果版的適配,從零到第一版大概花了三周的時間, 相當于用Swift語言重寫了由Java編寫的Moira, 比Android的適配多花了一倍的時間, ?我認為這不僅僅是簡單的二次開發(fā)



補充: 對于市面上移動端的政余軟件, ?經(jīng)技術分析考察發(fā)現(xiàn), 有一部分是用js語言進行編寫

這樣做,有優(yōu)點也有缺點

優(yōu)點是, 星盤的交互計算繪制本質都是在網(wǎng)頁上進行, 因為window、linux、macos、ios、android都能查看網(wǎng)頁,可以忽略掉對操作系統(tǒng)的適配


缺點也有:

要部署服務器進行才能訪問到網(wǎng)頁, 意味著要支付一部分費用,存在著運營成本,而筆者的Moira手機版, ?開發(fā)完成后不存在運營費用, 如果說有也就是在iOS上分發(fā)需要支付給蘋果的開發(fā)者年費688, 但我認為這不能算作運營成本.這意味著App可以以一個弱商業(yè)化的方式運營, 給予更好的排盤體驗

同時使用js意味不能復用已有的代碼, 得推倒重來, 意味著更長的開發(fā)周期

以此對比, 筆者從零到第一版Moira 安卓版只用了9天

同時Android使用Java開發(fā), 計算層和繪制層大同小異, ?在Android上的開發(fā)成果也可以增加到Moira上, 便捷地對windows版Moira進行二次開發(fā). 筆者認為, 電腦的大屏幕、鼠標、鍵盤能夠提升排盤的體驗, Moira手機版是對身旁沒有電腦,或者戶外情況下的進行使用, 要想高效進行星學研究, 還是離不開電腦, 因此使用原生開發(fā), 隨著Moira手機版功能增強, 也可以讓Moira本身更強大, 這是采用js開發(fā)方案所不能具備的優(yōu)點

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容