zoukankan      html  css  js  c++  java
  • cordova封装一个vue应用

    前言

    目前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(
            '-----项目信息-----'+'
    '+
            '为' + 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);
                }
            })
        })
  • 相关阅读:
    c# 文件上传
    iOSswift基础篇1
    copyWithZone 的使用方法
    客户端登陆接收大量数据导致数据丢失问题解决方法
    设计模式观察者模式(KVO)
    SQLite 之 C#版 System.Data.SQLite 使用
    设计模式MVC(C++版)
    JS 创建自定义对象的方法
    手机号、邮箱、身份证号 格式 验证
    在.cs文件中添加客户端方法
  • 原文地址:https://www.cnblogs.com/dshvv/p/14898979.html
Copyright © 2011-2022 走看看