林佳煜 蘇煜輝 陳正銘 鄭璇麗
摘要:2017年1月微信小程序正式上線。和傳統(tǒng)的原生App相比較,小程序能實現其基本功能,但又有所區(qū)別。為了讓更多人了解兩者之間的區(qū)別,在應用開發(fā)上做出更精致的選擇,在本文中將以安卓原生App為例來對兩者進行比較,從而分析兩者間的區(qū)別。首先通過介紹兩者的技術差異,進一步對比總結出兩者在功能實現方式上的區(qū)別,再對其優(yōu)劣、市場等方面做出分析,最終總結出兩者未來的發(fā)展趨勢,以供開發(fā)者更好地選擇。
關鍵詞:微信小程序;移動App;MINA框架;四大組件;藍牙模塊
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)35-0022-04
自微信小程序上線以來,有調查分析,截止到2017年年末,小程序的用戶已經超過了2億,它所涉及的行業(yè)領域也接近300+,小程序的價值被越來越多的人所發(fā)掘。我們不禁會拿它和手機的原生App做對比,思考兩者區(qū)別。小程序和原生App各有優(yōu)劣,在未來,兩者之間或許不僅沒有矛盾,還能起到互補作用。
1 微信小程序的開發(fā)和主要技術
微信團隊有為小程序設計師開發(fā)了專門的開發(fā)工具,在開發(fā)前,和注冊公眾號類似,首先要對小程序進行申請和認證,成功申請后登錄小程序管理后臺,點擊下載安裝開發(fā)工具,即可在此平臺上進行開發(fā)設計。
小程序開發(fā)過程像手機版的前端網站開發(fā)過程,它參考了很多前端的技術和理念,例如,它用React和Vue分別實現了“視覺組件”和Vue實現了標簽式邏輯與數據綁定,用CMD的require作為腳本文件的JavaScript。
小程序用JavaScript語言、XML、CSS語言編寫程序代碼,但所采用的又不是標準化的H5+CSS3+JavaScript架構,也和Web架構基于的W3C規(guī)范沒有任何關系。小程序使用騰訊全新定義的技術規(guī)范和架構,即WXML+WXSS+JavaScript架構,是微信特有的。
小程序有視圖層和邏輯層兩大部分。視圖層的作用主要是與小程序使用者的視覺進行交互,邏輯層則是對小程序的數據和邏輯處理,兩者共同構建了一個完整的框架。
1.1視圖層
視圖層描述的編程語言是騰訊公司定義規(guī)范的WXML和WXSS語言,剔除了復雜的關系配置,并且從規(guī)定上要求每個頁面需要有index.js、index.json、index.wxml、index.wxss這四個同名文件,每個文件功能不同:其中JS文件采用標準的JS語法規(guī)范,用于邏輯操作;Json文件顧名思義是用JSON語言書寫的,是為了配置頁面文件;wxml文件用XML語言書寫,作用是描述頁面視覺組件;而wxss則類似于前端的CSS語言,目的是定義給WXML組件樣式。
例如,在wxml文件中創(chuàng)建一個圖片視圖組件:
在wxss文件中:
.user-avater{
width:200rpx;
height:200rpx;
margin-top:160rpx;
border-radius:50%;//設置圖像為圓形
overflow:hidden;
}
通過在wxml文件中設置類對象名即可在wxss中利用該名對視圖進行修飾。
1.2邏輯層和MINA框架
邏輯層是基于JavaScript語言框架的,該框架能其和視圖層進行事件監(jiān)聽和數據傳輸,微信團隊把這兩個部分所組成的框架命名為MINA應用框架。開發(fā)者可以把網絡通信、數據安全、任務管理和文件系統(tǒng)等寫到邏輯層上,框架又對上層提供一整套JavaScript API(可搜索官網上的簡易教程),這樣就能輕松地使用微信官網提供的各種基礎功能與能力,快速制作出一個應用。其示例代碼如下:
在js文件中Page函數下:
Page({
data:{
motto:'Hello World',
userInfo:{},
hasUserlnfo: false,
},
//事件處理函數
bindViewTap: function(){
wx.switchTab({
url:'../posts/posts'
})
},
onLoad: function(){
},
})
其中的data和bindViewTap分別起到數據綁定和事件設置的作用。
2 Android App開發(fā)和主要技術
2.1開發(fā)軟件Android Studio
Android App是基于Java語言開發(fā)的,以前用的是Eclipse環(huán)境,現在主流用Android Studio開發(fā)。開發(fā)時要有有JavaJDK,Android SDK等輔助工具。Android App的開發(fā)采用的是將視圖層與邏輯層分開編寫的方式。邏輯層是基于純JAVA語言,視圖層在xml文件上,用到的自然是XML語言。下面是書寫示例:
xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:laout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"
android:id="@+id/mTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android.background="@color/colorPrimary"
app:tabGravity="fill"
app:tabIndicatorColor="@color/colorAccent"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/colorAccent"
app:tabTextColor="@android:color/white"
/>
android:id="@+id/mViewPager"
android:layout_width="match__parent"
android:layout_height="Odp"
android:layout_weight="1"/>
另外還有Manifase等配置文件,負責添加權限,注冊等。
<!--一添加網絡權限一-->
<!--一注冊活動并設為主活動一-->
2.2四大組件
Android系統(tǒng)的四大組件分別是活動(Activity),廣播接收器(Broadcast Receiver),服務(Service)和內容提供器(Content Pro—vider)。
Activity。顧名思義為程序的活動,每個界面會對應一個Activity,而androidApp采用的是視圖和邏輯分離的結構。例如要舉辦一個活動,邏輯層就是寫本次活動的流程,而視圖層則是布置活動的場地,即UI布局,而setContentView(R.layout.activ一ity_main)語句關聯視圖層,其中參數為對應的的xml文件。
Service,即服務,是專門為后臺任務而產生的方案,是和邏輯層分開的另外的線程任務,適合執(zhí)行那些時間較長并且和界面交互聯系不大的的任務,這是因為它不依賴不像activity一樣依賴于視圖層頁面,相對獨立。當此程序被切換到手機后臺時,該服務仍然可以執(zhí)行,直到任務完成。
Broadcast Receiver是廣播接收器的意思。這個組件可以響應本程序或者手機上其他進程的廣播消息,成為名副其實的溝通橋梁。具體過程是,一個應用程序注冊一個繼承Broadcas—tReceiver的廣播類,通過設置系統(tǒng)事件來決定要響應的消息,同樣發(fā)送廣播的另一方也要設置對應的事件參數,這樣當它完成行為后發(fā)送出去的消息就會這個廣播類響應。廣播接收器可以實現多線程通信或者不同應用之間的通信。
Content Provider,是內容提供器的意思,它的作用是實現不同應用之間的數據共享,比如你想要讀取系統(tǒng)電話簿中的聯系人或者其它應用的賬號信息。它有一套完整的機制,在程序進行訪問的同時,保證這些被訪數據的安全性。此組件是An—dmid進行程序進行數據共享的標準方法。
3 比較分析
基于上面簡介,下面從開發(fā)語言、架構等對兩者做了一個初步對比:
3.1開發(fā)上(功能擴展上,以連接藍牙功能為例:)
3.1.1小程序上,連接藍牙主要有以下步驟去調用官方的API
(1)對藍牙進行初始化
wx.openBluetoothAdapter({
success: function (res){
console.log(res)
},
fail: function(res){
wx.showModal({
content:'請開啟手機藍牙后再試'
})
}
})
(2)掃描查詢藍牙
wx.startBluetoothDevicesDiscovery({
success:function(res){
console.log('search',res)
}
})
(3)獲得已發(fā)現的設備
wx.getBluetoothDevices({
success:function(res){
console.log('發(fā)現設備',res)
if(res.devices[0]){
console.log(that.ab2hext(res.devices[O].advertisData))
}
}
})
(4)監(jiān)聽尋找到新設備的事件
wx.onBluetoothDeviceFound(function(devices){
console.log('發(fā)現設備:',devices.devices)
for(let i=0;i
//檢索指定設備
if(devices.devices[i].name=='掃描到的設備名字'){
that.setData({
deviceld:devices.devices[i].deviceld
})
//關閉搜索
that.stopBluetoothDevicesDiscovery();
console.log('已找到指定設備:',devices.devices[i].deviceld);
}
}
})
(5)連接低功耗藍牙設備
wx.createBLEConnection({
deviceld:that.data.deviceld,//搜索所獲設備id
success:function(res){
console.log('成功連接:',res.errMsg);
},
fail:function(res){
app.showToast('連接超時,請重試或更換車輛','none');
that.closeBluetoothAdapter();
}
})
3.1.2Android開發(fā)上
這里以低功耗藍牙為例(這是android4.3以后提供的API,多用于穿戴設備),下面是主要的步驟:
(1)權限的添加
在配置文件上添加BLUETOOTH, BLUETOOTH_ADMIN,ACCESS_COARSE_LOCATIONS三個請求。
(2)得到適配器(通過其進行低功耗藍牙操作)
獲取到適配器要先對其進行判斷,若不為空,則手機支持藍牙設備
final BluetoothManager bluetoothManager=
(BluetoothManager)getSystemService(Context.BLUE-TOOTH_SERVICE);
private BluetoothAdapter mBtAdapter=bluetoothManager. get-Adapter0;
(3)打開藍牙(先判斷是否啟動,若無則執(zhí)行打開意圖)
if(mBtAdapter!= null&&!mBtAdapter.isEnabled0){
,,申請打開藍牙功能
Intent btlntent= new Intent(BluetoothAdapter. ACTION_RE-QUEST_ENABLE);
startActivity(btIntent);}
(4)判斷api版本(如果當前api版本低于23,則要再次進行動態(tài)申請)
ActivityCompat.requestPermissions(MainActivity.this,
new String□{Manifest.permission.ACCESS_COARSE_LOCA-TION},0);
(5)掃描設備,其中,scanCallback是一個用于掃描的回調方法,mLeScanner是新封裝的掃描類
final ScanCallback callback=new ScanCallback(){
@Override
public void onScanResult(int callbackType,ScanResult re-sult){
super.onScanResult(callbackType,result);
BluetoothDevice device=result.getDevice();
mBleAddress=device.getAddress();
}};
mLeScanner.startScan(callback);
(6)通過掃描中獲得的地址連接設備
final BluetoothDevice btDevice=mBtAdapter.getRemot-eDevice(mBleAddress);
mGatt=btDevice.connectGatt(MainActivity.this,false,mCall-back):
從這個例子可以看到,安卓在功能開發(fā)是基于java代碼開發(fā),我們需要調用相應的SDK工具類來寫,有時要在xml配置文件上配置權限,而小程序則是js文件上調用api,而且很多功能在官方的開發(fā)文檔上都有。
從開發(fā)到使用,兩者之間各有優(yōu)劣:
3.2市場上
3.2.1微信小程序市場
小程序的日益完善,便利和巨大的用戶基數,這吸引了越來越多的企業(yè)者投資開發(fā),目前已經涵蓋200多個行業(yè)。其中重點投入的有生活服務類,電商平臺和小游戲等等。且截至2018年5月,用戶數量已突破10億,電商平臺、交通出行、工具、生活服務等較多,在未來,用戶數還會持續(xù)上升,不過,就單個小程序用戶量相當對App來說仍然很少。
3.2.2App市場
從全球市場來看,過去幾年App的下載量猛增,僅僅去年下載量就增加了6成作用,而中國就是最大的市場,App增長超過了其他國家。不過市場上的App逐漸出現馬太效應,一些大型企業(yè)越做越大,而一些功能少且使用頻度小的平臺逐漸轉移到小程序上。
4 結論
目前來看,開發(fā)者或是使用者對兩者的選擇,無非就是從“大”和“小”之間選擇。在未來,小程序將代替一些簡單功能的App成為主流,因為無論是開發(fā),推廣還是使用上都比App要便捷,而App則是在其他方面占優(yōu)勢,例如個性化的功能和交互方式,面向操作系統(tǒng)的底層性能優(yōu)化,對離線數據的支持等,都比小程序強大,適合承載大型多樣的功能,例如大型游戲、美圖秀秀、高德地圖這些。微信小程序更適合被用來開發(fā)為那些功能相對較少,并且使用頻度低的應用。
參考文獻:
[1]喻國明,程思琪.從“連接”到“場景”:互聯網發(fā)展的重要進階——試析微信小程序的價值邏輯與市場版圖[J].新聞大學,2018(01):121-127,146,153-154.
[2]董曉剛.Android系統(tǒng)四大組件的注冊與激活[J].硅谷,2013,6(05):16.
[3]郭全中.小程序及其未來[J].新聞與寫作,2017(03).
[4]王慶剛,孫永政,吳天城.淺析安卓開發(fā)的相關技術[J].電腦迷,2017(03):23.
[5]李成淵,徐明亮.基于安卓開發(fā)技術的校園咨詢共享平臺設計與實現[J].無線互聯科技,2018,15(18):140-142.
[6]雷楚奇.對安卓開發(fā)相關技術的研究[J].電子技術與軟件工程,2015(24):74.
[7]劉紅衛(wèi),微信小程序應用探析[J].無線互聯科技,2016(23):11-12,40.
【通聯編輯:梁書】
收稿日期:2019-10-20
基金項目:韶關學院校級大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目資助(項目編號:Sycxcy2019074S)
作者簡介:蘇煜輝(1999-),男,廣東潮州人,韶關學院信息科學與工程學院本科生,主要研究方向為網站開發(fā)、PHP開發(fā);林佳煜(1997-),男,廣東汕頭人,韶關學院信息科學與工程學院本科生,主要研究方向為嵌入式應用開發(fā)、安卓軟件開發(fā)。