写点什么

跨平台移动 APP 开发进阶 (二):HTML5+、mui 开发移动 app 教程

  • 2022 年 2 月 13 日
  • 本文字数:4754 字

    阅读完需:约 16 分钟

跨平台移动APP开发进阶(二):HTML5+、mui开发移动app教程

通过 HTML5 开发移动 App 时,会发现 HTML5 很多能力不具备。为弥补 HTML5 能力的不足,在 W3C 中国的指导下成立了 www.HTML5Plus.org 组织,推出 HTML5+规范。

HTML5+扩展了 JavaScript 对象 plus,使得 js 可以调用各种浏览器无法实现或实现不佳的系统能力,设备能力如摄像头、陀螺仪、文件系统等,业务能力如上传下载、二维码、地图、支付、语音输入、消息推送等。

HBuilder 的手机原生能力调用分 2 个层面:

a) 跨手机平台的能力调用都在 HTML5+ 规范里,比如二维码、语音输入,使用 plus.barcode 和 plus.speech。编写一次,可跨平台运行。

b) JS Bridge 是另一项创新技术,通过 js 可以直接调 ios 和 android 的原生 API,这部分就不再跨平台,比如调 ios game center,或在 android 手机桌面创建快捷方式。

JSB 的用法是 var obj = plus.android.import("android.content.Intent");将一个原生对象 android.content.Intent 映射为 js 对象 obj,然后在 js 里操作 obj 对象的方法属性就可以了。

注:使用 HTML5+开发的移动 App 并非 mobileweb 页面。这是新手最容易混淆的地方。mobileweb 的文件存放在 web 服务器上,而移动 App 的文件存放在手机本地,编写移动 App 的 html、js、css 文件被打包到 ipa 或 apk 等原生安装包,在手机客户端运行。

当然这些移动 App 里某些页面也可以继续从服务器端以网页方式运行。所以 mobile web,在 HBuilder 里新建项目时,属于 web 项目。不要放置到移动 App 项目。mobile web 项目也不能真机联调和打包.

无所不能的 js

最开始 js 仅仅局限于网页上一些效果,操作网页内容等,但是 nodejs 把 js 带入了后端,也就是服务器端,从此前端人员可以涉及后端,前后通吃,native.js(以及其他 js,稍候介绍)把 js 带入了移动端,从此前端人员前后移动端通吃。

前端涉及 app 的两种方式

适应移动端的网页

大家都很熟悉的 bootstrap,和现在刚出来的 amazeui 就是这种方法的代表,说的简单点就是对移动端做了适配,布局样式组件都适合移动端展示。

缺陷:毕竟不是 app,不管怎样也没办法取代 app 的便捷和功能强大。

js+html+css+打包技术

比较有名的就是 phonegap 了,国内的是 hbuilder,大概的意思是 html 负责页面内容,js 负责效果以及调用原生 app 方法,ui 框架负责样式,最后打包成 apk 或者 ipa

不谈 phonegap,不适用国内国情,是的,你没有看错,这是一个开发的 ide,其实就是对 eclipse 进行了深度定制。

特点是快捷键比较多,支持移动 app 开发(h5+方式)。

可以说 nodejs 将 js 带到后端,h5+将 js 带到移动端。

原理

上面说过的原理,再次说一遍:

html 负责页面,也就是的内容和框架;

js 负责调用方法,也就是调用一些移动端原生;

ui 负责样式,比较有名的 bootstrap,amazeui,jquery mobile,mui

ui 比较

上面说的几个 ui,做下简单比较,仅代表个人观点,

Amazeui:功能和 bootstrap 重复,官方解释是对中文排版做了优化,个人觉得有点多余,bootstrap 就很好。

Bootstrap:适合移动端浏览网页适配,移动端浏览效果不错,但是还是网页。

jquery mobile:专门对移动端做定制,看起来就像手机应用一样,js+css,国外的,不推荐,有坑。

Mui:这个是推荐的,比较了 jqmobile 和 mui,显然 mui 效果样式好点,估计也会有坑,但是支持国产吧。

下面通过一个简单的例子,讲解如何创建开发。

开始

新建项目

在首页点击新建移动 App,如下:



点击并拖拽以移动


或者在项目管理器内右键新建,或者快捷键 ctrl+n+a。

选择模版

这里选择 mui 项目,会自动引入 mui 的 js 和 css,如下:



点击并拖拽以移动

文件结构

默认有以下几个文件夹:css,fonts,js,如下:



点击并拖拽以移动

​ 

简单开发

header

打开 index.html 后在 body 内输入 mh 后回车,如下:



点击并拖拽以移动

body

同样输入 mbo 后回车

list

在 mbody 中添加一些列表

最后的代码
<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="utf-8">  
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    <title></title>  
    <script src="js/mui.min.js"></script>  
    <link href="css/mui.min.css" rel="stylesheet"/>  
    <script type="text/javascript" charset="utf-8">  
        mui.init();  
    </script>  
</head>  
<body>  
    <header class="mui-bar mui-bar-nav">  
        <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
        <h1 class="mui-title">我的标题</h1>  
    </header>  
    <div class="mui-content">  
        <ul class="mui-table-view" id="my_task_list">  
            <li class="mui-table-view-cell">  
                <div class="mui-slider-right mui-disabled">  
                    <a class="mui-btn mui-btn-red">删除</a>  
                </div>  
                <div class="mui-slider-handle">  
                    待办事项1  
                </div>  
            </li>  
            <li class="mui-table-view-cell">  
                <div class="mui-slider-right mui-disabled">  
                    <a class="mui-btn mui-btn-red">删除</a>  
                </div>  
                <div class="mui-slider-handle">  
                    待办事项2  
                </div>  
            </li>  
        </ul>  
    </div>  
</body>  
</html>  
复制代码


点击并拖拽以移动

调试(android 为例)

连接手机

首先需要连接手机

运行

选择运行——手机运行——在 xx 设备上运行

或者使用快捷键 ctrl+r

效果

现在你就可以在手机上看效果了。

注意

需要开启开发者模式。

打包

dcloud 证书打包

选择发行——App 打包——选择 android 以及 dcloud 公用证书,如下:



点击并拖拽以移动

参数配置

可能有时候会提示参数配置错误,这是你需要打开项目下 manifest.json 文件,并去掉第三方插件,如下: 


点击并拖拽以移动

等待

返回上一步的发行打包,点击打包后会提示你已经到云端打包,你只需要等待了,

一小会之后就打包好了,这时你就可以把 apk 拷贝到自己手机使用了,



点击并拖拽以移动


拓展阅读:mui 中几种 open 页面的区别

1.初始化时创建子页面

2.直接打开新页面

3.预加载页面


1.初始化时创建子页面

mui.init({  
    subpages: [{  
        url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址  
        id: your - subpage - id, //子页面标志  
        styles: {  
            top: subpage - top - position, //子页面顶部位置  
            bottom: subpage - bottom - position, //子页面底部位置  
            width: subpage - width, //子页面宽度,默认为100%  
            height: subpage - height, //子页面高度,默认为100%  
            ......  
        },  
        extras: {} //额外扩展参数  
    }]  
});  
复制代码


点击并拖拽以移动

2.直接打开新页面

mui.openWindow({  
    url: new - page - url,  
    id: new - page - id,  
    styles: {  
        top: newpage - top - position, //新页面顶部位置  
        bottom: newage - bottom - position, //新页面底部位置  
        width: newpage - width, //新页面宽度,默认为100%  
        height: newpage - height, //新页面高度,默认为100%  
        ......  
    },  
    extras: {  
        ..... //自定义扩展参数,可以用来处理页面间传值  
    }  
    show: {  
        autoShow: true, //页面loaded事件发生后自动显示,默认为true  
        aniShow: animationType, //页面显示动画,默认为”slide-in-right“;  
        duration: animationTime //页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;  
    },  
    waiting: {  
        autoShow: true, //自动显示等待框,默认为true  
        title: '正在加载...', //等待对话框上显示的提示内容  
        options: {  
            width: waiting - dialog - widht, //等待框背景区域宽度,默认根据内容自动计算合适宽度  
            height: waiting - dialog - height, //等待框背景区域高度,默认根据内容自动计算合适高度  
            ......  
        }  
    }  
})  
复制代码


点击并拖拽以移动

3.预加载页面

// 方式1  
mui.init({  
    preloadPages: [{  
        url: prelaod - page - url,  
        id: preload - page - id,  
        styles: {}, //窗口参数  
        extras: {}, //自定义扩展参数  
        subpages: [{}, {}] //预加载页面的子页面  
    }]  
});  
  
// 方式2  
var page = mui.preload({  
    url: new - page - url,  
    id: new - page - id, //默认使用当前页面的url作为id  
    styles: {}, //窗口参数  
    extras: {} //自定义扩展参数  
});  
复制代码


点击并拖拽以移动

区别如下:

1.子页面和非子页面

以上三种方式中,2,3 打开的页面非子页面,

区别是子页面相当于 html 中的 iframe,而非子页面相当于新开了一个浏览器窗口加载了一个 html

2.子页面适用于侧滑菜单

子页面有其特点,特别适用与 index.html+list.html 这种情况,

如果用 index.html(主页面)+list.html(子页面)实现的话,当主页面右滑时子页面会自动跟随,

而用 index.html(主页面)+list.html(新页面)实现的话,主页面右滑,新页面不右滑,还得单独处理新页面。

3.子页面使用频繁切换的情况

如果频繁左滑右滑,在配置较低的手机上会出现 list.html 遮住 index.html 的情况,采用子页面模式就不会,采用新页面模式几率很大。

4.子页面适用与下拉刷新和上拉加载

之前做向下拉刷新的时候,采用的是新页面的形式,按照官网教程,怎么搞都不成功,后来看了下源码,发现下拉刷新必须采用子页面的形式,也就是你的 list.html 必须是 index.html 的子页面,才可以下拉刷新。

5.新页面适用于新页面

open 一个新页面,适用于查看详情之类的,需要打开一个新页面的情况,并且 mui 自己封装了新页面的 back 方法,你就不需要去操心了。

6.预加载页面的两种方式

第一种是在初始化的时候预加载,这种情况适合在你这个页面在很久之后才会用,如果你要立即到的页面并使用,那么你会得到 null。第二种方式类似与 open,个人感觉没有什么太大的区别,唯一的区别是 open 就直接打开了,preload 只是加载,你可以之后选择打开的时机。

7.总结

需要下拉刷新上拉加载请使用子页面,需要打开一个新页面请使用新页面方式,需要加载一个页面但是暂时不使用请使用预加载方式。

发布于: 刚刚阅读数: 2
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
跨平台移动APP开发进阶(二):HTML5+、mui开发移动app教程