利用HBuilder打包Vue开发的webapp为app

众所周知,前端开发完成的webapp只能运行在浏览器上,对运行环境有一定的限制,也就是除了浏览器其他的环境下不支持;那么现在如果有个需求是这样的呢?需要一套代码三端运行呢?三端运行(黑人脸??)是的,三端运行即web端,安卓端和IOS端 ;先别急着说实现不了和不可能,利用HBulder来试试;

 

HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。  HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse,所以顺其自然地兼容了Eclipse的插件。 HBuilder其实只是一款编辑器,拥有较为丰富的语法库,对Vue的支持比较友好,工具轻量且功能强大;

官网地址:https://www.dcloud.io/

首先我们做一下准备工作:

下载HBuilder并安装完成
将开发完的webapp利用webpack打包完成
下载360手机助手,打包完成后方便安装到手机上运行看效果
 

1.首先我们拿到我们的webapp并运行起来,确认没有异常之后利用webpack打包,webpack打包后将会产生 dist/目录(命名根据webpack来,内含index.html和static/目录)

2.打开HBuilder,然后点击文件--新建--移动App,创建一个空白模板的移动App;

 

 3.创建好了空白的移动App模板之后,我们可以看到我们的文件夹路径变为这样(可以删除css、js、img等文件夹)

 

 
4.将npm run build(打包后)生成的index.html内容全部复制进Hbuilder的index.html里面去,并将产生的static/目录复制到HBuilder本项目目录下,此时我们的目录结构是这样的:

 

 5.打开index.html里面的对static的引用,将=后面的'/'去掉

 

 

6.点击一下浏览器运行,看是否有异常,如果没有异常,我们接着往下走;HBuilder支持云端打包和离线打包,本文暂且只讲述云端打包

7.项目文件夹中右键--发行--点击云打包-打原生安装包,根据所需要的版本(安卓和IOS)进行打包

 

 8.提示信息不管,直接点击确认没有缺少权限,继续打包

 

 9.提交到云端之后,直接点确定,等制作安装包,这里可能需要等个两三分钟,请耐心等待打包完成

 

 

 

10.点击手动下载就可以下载到我们打包好的apk了

 

 

 

11.这里我们可以使用手机模拟器来安装apk应用,也可以用360手机助手来安装,我们来讲讲360手机助手安装:管理我的手机--安装本地应用--选择需要安装的apk,然后即可安装;其实360助手只是一个手段,重点是apk,当然可以通过微信助手发送apk手机安装;

12.这就是我们打包完之后的app,运行的速度还比较流畅,占用内存大小也还好,打包完之后只用了30+M;功能都正常,只是布局方面跟webapp相比部分略微大一点点,几乎可以忽略不计(图片效果是因为是截图,所以有点挤压,打包完之后看效果是正常的)

 

 

解决HBuilder中打包app之后点击物理键返回直接退出app的问题(这里特别感谢@雨落秋垣提出的建议和解决方案,亲测可用):

/**
 * 解决hbuilder打包app之后点击手机返回键直接退出app的
 */
document.addEventListener('plusready', function() {
    // 获取当前页面所属的Webview窗口对象
    var webview = plus.webview.currentWebview();
    // 注册返回按键事件
    plus.key.addEventListener('backbutton', function() {
        webview.canBack(function(e) {
            // 得到当前url
            var filename = location.href;
            // 截取得到当前的文件名
            filename = filename.substr(filename.lastIndexOf('/') + 1);
            // 文件名比较,只有在首页和登录页的时候
            if(filename == "user_login" || filename == "") {
                // 在首页或者登录页物理键返回点击确认直接触发关闭
                if(window.confirm('是否退出?')) {
                    // 关闭webview窗口
                    webview.close();
                    return true;
                } else {
                    return false;
                }
                // 不在首页和登录页物理键返回
            } else {
                webview.back();
            }
        })
    });
});

在项目中使用:我们只需要在项目中创建一个单独的js文件,然后引入这个文件到main.js中即可

 

posted @ 2019-09-17 10:38  有梦想的咸鱼前端  阅读(4730)  评论(5编辑  收藏  举报