APP下载

微信小程序与移动App的开发技术比较

2019-03-07林佳煜苏煜辉陈正铭郑璇丽

电脑知识与技术 2019年35期
关键词:移动APP微信小程序

林佳煜 苏煜辉 陈正铭 郑璇丽

摘要:2017年1月微信小程序正式上線。和传统的原生App相比较,小程序能实现其基本功能,但又有所区别。为了让更多人了解两者之间的区别,在应用开发上做出更精致的选择,在本文中将以安卓原生App为例来对两者进行比较,从而分析两者间的区别。首先通过介绍两者的技术差异,进一步对比总结出两者在功能实现方式上的区别,再对其优劣、市场等方面做出分析,最终总结出两者未来的发展趋势,以供开发者更好地选择。

关键词:微信小程序;移动App;MINA框架;四大组件;蓝牙模块

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2019)35-0022-04

自微信小程序上线以来,有调查分析,截止到2017年年末,小程序的用户已经超过了2亿,它所涉及的行业领域也接近300+,小程序的价值被越来越多的人所发掘。我们不禁会拿它和手机的原生App做对比,思考两者区别。小程序和原生App各有优劣,在未来,两者之间或许不仅没有矛盾,还能起到互补作用。

1 微信小程序的开发和主要技术

微信团队有为小程序设计师开发了专门的开发工具,在开发前,和注册公众号类似,首先要对小程序进行申请和认证,成功申请后登录小程序管理后台,点击下载安装开发工具,即可在此平台上进行开发设计。

小程序开发过程像手机版的前端网站开发过程,它参考了很多前端的技术和理念,例如,它用React和Vue分别实现了“视觉组件”和Vue实现了标签式逻辑与数据绑定,用CMD的require作为脚本文件的JavaScript。

小程序用JavaScript语言、XML、CSS语言编写程序代码,但所采用的又不是标准化的H5+CSS3+JavaScript架构,也和Web架构基于的W3C规范没有任何关系。小程序使用腾讯全新定义的技术规范和架构,即WXML+WXSS+JavaScript架构,是微信特有的。

小程序有视图层和逻辑层两大部分。视图层的作用主要是与小程序使用者的视觉进行交互,逻辑层则是对小程序的数据和逻辑处理,两者共同构建了一个完整的框架。

1.1视图层

视图层描述的编程语言是腾讯公司定义规范的WXML和WXSS语言,剔除了复杂的关系配置,并且从规定上要求每个页面需要有index.js、index.json、index.wxml、index.wxss这四个同名文件,每个文件功能不同:其中JS文件采用标准的JS语法规范,用于逻辑操作;Json文件顾名思义是用JSON语言书写的,是为了配置页面文件;wxml文件用XML语言书写,作用是描述页面视觉组件;而wxss则类似于前端的CSS语言,目的是定义给WXML组件样式。

例如,在wxml文件中创建一个图片视图组件:

在wxss文件中:

.user-avater{

width:200rpx;

height:200rpx;

margin-top:160rpx;

border-radius:50%;//设置图像为圆形

overflow:hidden;

}

通过在wxml文件中设置类对象名即可在wxss中利用该名对视图进行修饰。

1.2逻辑层和MINA框架

逻辑层是基于JavaScript语言框架的,该框架能其和视图层进行事件监听和数据传输,微信团队把这两个部分所组成的框架命名为MINA应用框架。开发者可以把网络通信、数据安全、任务管理和文件系统等写到逻辑层上,框架又对上层提供一整套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开发和主要技术

2.1开发软件Android Studio

Android App是基于Java语言开发的,以前用的是Eclipse环境,现在主流用Android Studio开发。开发时要有有JavaJDK,Android SDK等辅助工具。Android App的开发采用的是将视图层与逻辑层分开编写的方式。逻辑层是基于纯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系统的四大组件分别是活动(Activity),广播接收器(Broadcast Receiver),服务(Service)和内容提供器(Content Pro—vider)。

Activity。顾名思义为程序的活动,每个界面会对应一个Activity,而androidApp采用的是视图和逻辑分离的结构。例如要举办一个活动,逻辑层就是写本次活动的流程,而视图层则是布置活动的场地,即UI布局,而setContentView(R.layout.activ一ity_main)语句关联视图层,其中参数为对应的的xml文件。

Service,即服务,是专门为后台任务而产生的方案,是和逻辑层分开的另外的线程任务,适合执行那些时间较长并且和界面交互联系不大的的任务,这是因为它不依赖不像activity一样依赖于视图层页面,相对独立。当此程序被切换到手机后台时,该服务仍然可以执行,直到任务完成。

Broadcast Receiver是广播接收器的意思。这个组件可以响应本程序或者手机上其他进程的广播消息,成为名副其实的沟通桥梁。具体过程是,一个应用程序注册一个继承Broadcas—tReceiver的广播类,通过设置系统事件来决定要响应的消息,同样发送广播的另一方也要设置对应的事件参数,这样当它完成行为后发送出去的消息就会这个广播类响应。广播接收器可以实现多线程通信或者不同应用之间的通信。

Content Provider,是内容提供器的意思,它的作用是实现不同应用之间的数据共享,比如你想要读取系统电话簿中的联系人或者其它应用的账号信息。它有一套完整的机制,在程序进行访问的同时,保证这些被访数据的安全性。此组件是An—dmid进行程序进行数据共享的标准方法。

3 比较分析

基于上面简介,下面从开发语言、架构等对两者做了一个初步对比:

3.1开发上(功能扩展上,以连接蓝牙功能为例:)

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)获得已发现的设备

wx.getBluetoothDevices({

success:function(res){

console.log('发现设备',res)

if(res.devices[0]){

console.log(that.ab2hext(res.devices[O].advertisData))

}

}

})

(4)监听寻找到新设备的事件

wx.onBluetoothDeviceFound(function(devices){

console.log('发现设备:',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开发上

这里以低功耗蓝牙为例(这是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)打开蓝牙(先判断是否启动,若无则执行打开意图)

if(mBtAdapter!= null&&!mBtAdapter.isEnabled0){

,,申请打开蓝牙功能

Intent btlntent= new Intent(BluetoothAdapter. ACTION_RE-QUEST_ENABLE);

startActivity(btIntent);}

(4)判断api版本(如果当前api版本低于23,则要再次进行动态申请)

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):

从这个例子可以看到,安卓在功能开发是基于java代码开发,我们需要调用相应的SDK工具类来写,有时要在xml配置文件上配置权限,而小程序则是js文件上调用api,而且很多功能在官方的开发文档上都有。

从开发到使用,两者之间各有优劣:

3.2市场上

3.2.1微信小程序市场

小程序的日益完善,便利和巨大的用户基数,这吸引了越来越多的企业者投资开发,目前已经涵盖200多个行业。其中重点投入的有生活服务类,电商平台和小游戏等等。且截至2018年5月,用户数量已突破10亿,电商平台、交通出行、工具、生活服务等较多,在未来,用户数还会持续上升,不过,就单个小程序用户量相当对App来说仍然很少。

3.2.2App市场

从全球市场来看,过去几年App的下载量猛增,仅仅去年下载量就增加了6成作用,而中国就是最大的市场,App增长超过了其他国家。不过市场上的App逐渐出现马太效应,一些大型企业越做越大,而一些功能少且使用频度小的平台逐渐转移到小程序上。

4 結论

目前来看,开发者或是使用者对两者的选择,无非就是从“大”和“小”之间选择。在未来,小程序将代替一些简单功能的App成为主流,因为无论是开发,推广还是使用上都比App要便捷,而App则是在其他方面占优势,例如个性化的功能和交互方式,面向操作系统的底层性能优化,对离线数据的支持等,都比小程序强大,适合承载大型多样的功能,例如大型游戏、美图秀秀、高德地图这些。微信小程序更适合被用来开发为那些功能相对较少,并且使用频度低的应用。

参考文献:

[1]喻国明,程思琪.从“连接”到“场景”:互联网发展的重要进阶——试析微信小程序的价值逻辑与市场版图[J].新闻大学,2018(01):121-127,146,153-154.

[2]董晓刚.Android系统四大组件的注册与激活[J].硅谷,2013,6(05):16.

[3]郭全中.小程序及其未来[J].新闻与写作,2017(03).

[4]王庆刚,孙永政,吴天城.浅析安卓开发的相关技术[J].电脑迷,2017(03):23.

[5]李成渊,徐明亮.基于安卓开发技术的校园咨询共享平台设计与实现[J].无线互联科技,2018,15(18):140-142.

[6]雷楚奇.对安卓开发相关技术的研究[J].电子技术与软件工程,2015(24):74.

[7]刘红卫,微信小程序应用探析[J].无线互联科技,2016(23):11-12,40.

【通联编辑:梁书】

收稿日期:2019-10-20

基金项目:韶关学院校级大学生创新创业训练计划项目资助(项目编号:Sycxcy2019074S)

作者简介:苏煜辉(1999-),男,广东潮州人,韶关学院信息科学与工程学院本科生,主要研究方向为网站开发、PHP开发;林佳煜(1997-),男,广东汕头人,韶关学院信息科学与工程学院本科生,主要研究方向为嵌入式应用开发、安卓软件开发。

猜你喜欢

移动APP微信小程序
当图书馆遇上微信小程序
信息技术环境下会计专业教学模式的构建
高校学习者对日语学习APP使用状况的研究调查
大学生利用移动APP自主学习英语的现状调查研究
移动APP在英语教学中的应用研究