前言

目前webApp的实现方式有很多种,但是大致分为一下技术类型
编译增强性:编译html成不同平台的源代码,将其运行在各个平台上,对应框架有 taro、uiniapp、reactNactive
webview型:将html代码运行在原生的webview容器中,跟你自己手写webview没什么本质区别。对应的框架有:cordova

第一步:安装android开发环境
具体文档,看我的语雀 https://www.yuque.com/dingshaohua/hn6srn

第二步:安装cordova
参考官方文档:http://cordova.axuer.com/

第三步:创建一个空的cordova项目

cordova create MyApp

第四步:创建一个vue项目
并将编vue.config.js配置改为如下

module.exports = {
publicPath: '', //静态资源地址(因为cordova的访问方式是file//xxx)
outputDir:'/MyApp/www' //输出目录(直接输出到cordova的web代码文件夹中)
}

修改vue的模板 /public/index.html
增加如下两行代码

<script src="cordova.js"></script>
<script src="cordova_plugins.js"></script>

然后运行编译 npm run build 。这个时候编译的代码会被传到cordova项目中(的www目录下)

第五步:cordova增加平台

即MyApp下,执行命令

cordova platform add android

或者指定版本

cordova platform add android@^9.0.0

此时,根目录下会多出platform>android目录,这个目录就是安卓项目

第六步:Android studio导入刚才的目录
导入完成后,记得配置Gradle仓库代理,不然依赖几乎安装不来

第七步:此时调试,打包即可

添加访问原生底层的权限
比如我要使用麦克风和外放的权限
1、在cordova中安装权限插件

cordova plugin add cordova-plugin-android-permissions

2、使用插件
切换到vue项目,在你需要使用的地方使用,

比如我这里已进入项目就要使用权限插件,那我就再main.js文件中增加如下代码

// http://www.web000.cn/?p=363
document.addEventListener('deviceready', ()=> {
console.log('Device is Ready!');
if (cordova) {
const permissions = cordova.plugins.permissions;
const list = [
permissions.MICROPHONE,
permissions.RECORD_AUDIO
];
permissions.requestPermissions(list, () => {
console.log('授权成功')
}, () => {
console.log('授权失败')
});
}
}, false);

3、cordova项目中增加安卓配置文件的权限申请
MyApp>config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.MyApp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>美团</name>
<description>
就是外卖啊
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
<!-- 新增这块start -->
<config-file target="AndroidManifest.xml" parent="/manifest" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.MICROPHONE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.audio.low_latency" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-feature android:name="android.hardware.audio.pro" />
<uses-feature android:name="android.hardware.microphone"/>
</config-file>
<!-- 新增这块end -->
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
</widget>

4、然后重新添加平台,重复以上步骤即可

 自定义app的图标

1、cordova项目的config.xml
增加配置如下代码

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.example.abc" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>美团</name>
<description>
就是外卖啊
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
<!-- 新增这行 -->
<icon src="res/icon/android/icon.png" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
</widget>

2、cordova项目增加icon
MyApp>res/icon/android/icon.png

自动化脚本

截至目前,从创建vue应用,到编译至cordova应用下的www目录,以及修改cordova添加安卓平台并修改gradle阿里代理源,每一步都需要手动来做。太麻烦,所以写了个脚本

安装依赖

安装两个项目依赖的一键脚本(vue项目和corodva项目)

const shell = require('shelljs');
const inquirer = require('inquirer');
const chalk = require('chalk'); const qs = [{
type: "checkbox",
message: "选择需要安装依赖的项目",
name: "project",
choices: [
{
name: "主程序项目"
},{
name: "cordova项目"
}
]
}];
inquirer
.prompt(qs)
.then(answers => {
console.log(chalk.greenBright(
'-----项目信息-----'+'\n'+
'为' + answers.project+'安装依赖中...'
)); answers.project.forEach(element => {
if(element === '主程序项目'){
shell.exec('yarn', null, () => {
console.log(chalk.greenBright('[主程序项目]依赖安装完毕'));
})
} if(element === 'cordova项目'){
shell.exec('cd ./cordova && yarn', null, () => {
console.log(chalk.greenBright('[cordova项目]依赖安装完毕'));
})
} });
})

打包脚本

const fs = require('fs');
const shell = require('shelljs');
const inquirer = require('inquirer');
const chalk = require('chalk');
const childProcess = require('child_process'); const qs = [{
type: "confirm",
message: "是否需要更新工作台模块?", // 因为我是两个vue项目合并,第二个vue项目通过iframe的方式被引入到第一个所以 我要考虑这个 这不是必须的
name: "upWkbench",
default: false
}]
inquirer
.prompt(qs)
.then(answers => {
console.log(chalk.greenBright('编译vue代码中...'));
if (answers.upWkbench) {
shell.exec('cd ./module/workbench && npm run build')
console.log(chalk.greenBright('工作台模块更新完毕,即将更新主程序'));
}
shell.exec('npm run build');
console.log(chalk.greenBright('主程序更新完毕,即将操作cordova项目'));
console.log("删除可能存在的旧安卓平台");
shell.rm('-rf', './cordova/platforms')
console.log("开始添加安卓平台");
childProcess.exec('cd ./cordova && cordova platform add android', (err, sto) => {
if (!err) {
console.log("开始替换安卓依赖代理仓库");
// 替换的内容
const str =
`repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
google()
}
repos`; // 读取文件
fs.readFile('./cordova/platforms/android/build.gradle', (err, data) => {
// 修改文件内容
data = data.toString().replace(/repositories repos/g, str)
// 写入文件
fs.writeFile('./cordova/platforms/android/build.gradle', data, () => {
console.log("完成所有操作,请打开Android studio打包");
})
})
} else {
console.log(err);
}
})
})

cordova封装一个vue应用的更多相关文章

  1. 手把手从零开始---封装一个vue视频播放器组件

    现在,在网页上播放视频已经越来越流行,但是网上的资料鱼龙混杂,很难找到自己想要的,今天小编就自己的亲身开发体验,手把手从零开始---封装一个vue视频播放器组件. 作为一个老道的前端搬砖师,怎么可能会 ...

  2. 基于iview 封装一个vue 表格分页组件

    iview 是一个支持中大型项目的后台管理系统ui组件库,相对于一个后台管理系统的表格来说分页十分常见的 iview是一个基于vue的ui组件库,其中的iview-admin是一个已经为我们搭好的后天 ...

  3. 一篇文章带你使用Typescript封装一个Vue组件

    一.搭建项目以及初始化配置 vue create ts_vue_btn 这里使用了vue CLI3自定义选择的服务,我选择了ts.stylus等工具.然后创建完项目之后,进入项目.使用快捷命令code ...

  4. 第一个Vue插件从封装到发布

    前言 这是我封装的第一个Vue插件,实现的功能是滑动选择省市区,虽然只是一个简单的插件,但还是挺开心的,记录一下步骤. 插件地址:https://github.com/leichangchun/vue ...

  5. vue封装一个简单的div框选时间的组件

    记录一下我前段时间封装的一个vue组件吧.技术需要积累,有时间我把我之前写的还不错的组件都开源出来.并尝试vue和react 两种方式的组件封装.今天简单写下鼠标框选div选中效果的封装吧. div框 ...

  6. Vue.use源码分析(转)+如何封装一个组件

    封装一个组件:https://www.jianshu.com/p/89a05706917a 我想有过vue开发经验的,对于vue.use并不陌生.当使用vue-resource或vue-router等 ...

  7. Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路

    封装一个ECharts组件的一点思路 有关后台管理系统之前写过三遍博客,看这篇之前最好先看下这三篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system ...

  8. Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件

    封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...

  9. 基于Ant Design Vue封装一个表单控件

    开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...

  10. 使用vue.js封装一个包含图片的跑马灯组件

    初衷: 学习完Vuejs后,来准备练习仿写一下老东家的门户页面,主要是为了熟悉一下常用插件的使用,比如video.js,wow.js,swiper等等:而其中涉及到一个包含图片跑马灯组件,大概长这样( ...

随机推荐

  1. Windows与Linux通过Samba共享文件夹

    Ubuntu系统,按如下步骤执行: 1.安装samba服务 sudo apt update sudo apt install samba -y 2.创建共享目录 sudo mkdir -p /home ...

  2. 阿里云服务器中Linux下centos7.6安装JDK

    一.下载jdk安装包 wget https://imcfile.oss-cn-beijing.aliyuncs.com/shizhan/file/liaoshixiong/jdk-8u231-linu ...

  3. java基础之Stream流

    一.使用Stream的目的:用于解决已有集合类库既有的弊端,只求关注[目的],不关注[方式],且其数据源:可以是集合,数组等 例子: public class NormalFilter { publi ...

  4. mysql、PikaDB的使用方法和优化策略

    Mysql 字段选择 尽量选用INT,BIGINT,4字节8字节的消耗小于varchar.字符串选择VARCHAR增加拓展性. 时间应使用时间戳BIGINT存储,不使用DATETIME. 不使用BLO ...

  5. java.security.provider.getservice blocked

    JDK版本: JDK8u192 bug: https://bugs.openjdk.org/browse/JDK-8206333 堆栈: "Common-Business-Thread-57 ...

  6. SpringBoot事件和监听器

    事件和监听器 生命周期监听 场景:监听应用的生命周期 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件: 1. ...

  7. 如何把ASP.NET Core WebApi打造成Mcp Server

    前言 MCP (Model Context Protocol)即模型上下文协议目前不要太火爆了,关于它是什么相信大家已经很熟悉了.目前主流的AI开发框架和AI工具都支持集成MCP,这也正是它的意义所在 ...

  8. P10833 [COTS 2023] 下 Niz题解

    题意: 给定长度为 \(N\) 的序列 \(a\),求满足以下条件的 \((l,r)\) 对数: \(1\le l\le r\le N\): \(a_l,a_{l+1},\cdots,a_{r-1}, ...

  9. 操作系统:详解socket的接口实现

    上节了解了套接字的工作机制和数据结构,但套接字有哪些基本接口实现呢? 套接字接口 套接字接口最初是 BSD 操作系统的一部分,在应用层与 TCP/IP 协议栈之间接供了一套标准的独立于协议的接口. L ...

  10. 从Tushare获取历史行情数据

    从Tushare获取历史行情数据,分为两种,一种是后复权(daily_hfq)数据,一种是不复权(daily)数据,获取到的数据存储在MongoDB数据库中,每个集合(collection)中,数据字 ...