最近在給f做一些工具app,學習了不少關於uniapp編寫android應用的知識。
首先,App應用的創建的時候要選擇項目類型為uniapp類型。最開始我選擇的是h5+項目,這種項目就比較容易寫成純js的項目,利用一些html5plus能力,或者使用mui來編寫手機app。
我調研了一下,uniapp和h5+(mui為代表)的差異和優缺點如下所示。
技術類型 | 優點 | 缺點 |
---|---|---|
uniapp | 可以使用unipp封裝的組件和api,有海量的插件可以從插件市場中找到。兼容多端,也可以用html5plus的api能力。可以復用小程序項目的邏輯代碼,對團隊的技術積累有好處。 | 需要學習vue語法,可能性能沒有mui的優化效果好。 |
H5+ | 也可以跨端生成多種應用,但是不能使用uniapp的組件、插件以及api中涉及h5的能力。其中mui號稱可以達到原生應用級別的性能和交互效果。 | 局限於原生js以及依賴庫的編寫方式。無法統一和小程序項目的技術棧和編程方式,無法服用代碼。 |
我首先嘗試了一下h5+的mui項目,發現寫起來很原始,因為大部分能力都是mui的js庫提供的,寫法完全和uniapp項目不同,很多uniapp封裝的組件和api都不能直接使用。為了長遠考慮,如果以后還要生成ios的app,mui技術未必適合。
再加上之前的小程序端也是uniapp類型項目,有很多基礎庫和方法是可以借鑒的,所以最終選擇使用uniapp類型的項目來開發f端的app。
不得不說uniapp來開發跨端的應用是非常方便的,同一套代碼除了平台特性的代碼不能直接在其他平台上用,大部分通用的能力和代碼是可以復用的。
tab上的定義還是在pages.json里面的tabBar定義,圖片資源的目錄結構也可以參考之前的項目。
然后就是一些功能開發了,其中uuid的獲取方式和小程序不通,原始app的獲取uuid(設備的唯一標識)的api在html5plus上也有對應的api,獲取方式如下所示。
const uuid = plus.device.uuid;
值得一提的是html5plus里面提供了非常多好用的html5新特性,包括藍牙(Bluetooth)、AD(廣告聯盟模塊)、設備麥克風(Audio)、二維碼(BarCode)、設備的攝像頭(Camera)、設備信息(Device)、系統相冊(Gallery)等。上面獲取uuid的方法就屬於管理設備信息的API之一。國內有專門的HTML5產業聯盟,相關API可以從這里跳轉。
由於我是開發的andorid app,所以在調試的時候也會使用到android studio,關於調試的方法我會單獨寫一篇文章來講述,這里不展開說。大部分時候我們都有2種選擇,要么使用AVD(虛擬設備)來調試app,要么連接真實手機進行調試(假設你有android系統的手機)。
調試的過程會遇到一些坑(后面寫專題單獨講),但是最終我們是可以開發出較為滿意的app,通過hbuilder可以打包成需要的apk。
這種開發模式非常流暢,適合創業團隊或者全棧技術人,一套代碼生成多端,開發效率非常高。測試代碼也可以復用之前的,uniapp項目的自動化測試都是類似的,對測試團隊也是非常友好。
性能方面,由於是小范圍使用,數據量不是很大,體驗上和原生app差別不大。對於資源也能預加載,這方面我還沒有深入了解,但是提供了相關api,不用太擔心lazy load的問題。