林佳煜 苏煜辉 陈正铭 郑璇丽
摘要: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-),男,广东汕头人,韶关学院信息科学与工程学院本科生,主要研究方向为嵌入式应用开发、安卓软件开发。