Cordova + vue 打包安卓(Android) apk
Cordova + vue 打包安卓(Android) apk
本系统通过Vue集成Cesium制作的高精度三维地图引擎,在此基础上进行Android封装,封装与2022-9-26日,亲测可用。
第一步:环境配置
1、安装jdk、sdk及node
略
2、安装Cordova
npm install -g cordova
之后可以查看一下版本
第二步:新建Cordova项目(建议放在英文目录下)
执行行命令
cordova create myApp
myapp :cordova 目录名
cd myApp 进入目录
使用命令
cordova platform add android
来生成Android平台的cordova库,这时platforms文件夹中会生成一个android文件夹。
在生成的cordova文件中 :config.xml -包含应用相关信息,使用到的插件以及面向的平台platforms – 包含应用运行平台如 Android 和 iOS 上对应的 Cordova 库plugins – 包含应用所需插件的 Cordova 库,使得应用能够访问例如照相机和电池状态相关的事项。www – 包含应用源代码,例如 HTML, JavaScript 和 CSS 文件hooks – 包含为个性化应用编译系统所需的脚本
到这里,cordova项目就已经建好了。
第三步:Vue项目打包放入cordova项目
需要先将vue.config.js中publicPath属性改为:”/” (没有vue.config.js文件可以百度一个模板自己在根目录创建一个)
然后修改路由,在router的index.js
下修改mode,吧原本的history改为hash
使用打包命令
npm run build
之后将打包文件夹下的文件(默认打包在dist文件夹下)全部复制到cordova项目下的www目录中(将原先www目录中的文件全部删除)
第四步:打包Android
1、调试打包apk软件
在打包之前,检查打包相关环境是否正确安装,在cordova项目文件夹下执行命令。
cordova requirements
即可查看当前环境中安装情况。显示如下即标识环境正确安装。(确认安装正确即可,不需要每次都去进行检查)
2、打包成安卓apk
执行命令
cordova build android -release
3、解决封装成Android时http的不可用问题
最初怀疑是Android 高版本默认不允许http访问造成,查看了platform/android下的Android studio项目AndroidManifest.xml文件,看到其中已经加了
android:usesCleartextTraffic="true"
(没加的一定要加上,加在application标签上,具体加上了如下图)
很显然不是这个原因造成的。
Android默认通信协议支持HTTPS,不支持HTTP,需要修改一下项目中的源码。
将cordova的本地虚拟容器改为http的,是不是就可以了?在项目根目录下搜索ConfigXmlParser.java
找到这个文件,打开。
在ConfigXmlParser.java
文件中的原来是这样的:
package org.apache.cordova;import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;public class ConfigXmlParser {private static String TAG = "ConfigXmlParser";private static String SCHEME_HTTP = "http";private static String SCHEME_HTTPS = "https";private static String DEFAULT_HOSTNAME = "localhost";private String launchUrl;private String contentSrc;private CordovaPreferences prefs = new CordovaPreferences();private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20);public CordovaPreferences getPreferences() {return prefs;}public ArrayList<PluginEntry> getPluginEntries() {return pluginEntries;}public String getLaunchUrl() {if (launchUrl == null) {setStartUrl(contentSrc);}return launchUrl;}public void parse(Context action) {// First checking the class namespace for config.xmlint id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName());if (id == 0) {// If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xmlid = action.getResources().getIdentifier("config", "xml", action.getPackageName());if (id == 0) {LOG.e(TAG, "res/xml/config.xml is missing!");return;}}pluginEntries.add(new PluginEntry(AllowListPlugin.PLUGIN_NAME,"org.apache.cordova.AllowListPlugin",true));parse(action.getResources().getXml(id));}boolean insideFeature = false;String service = "", pluginClass = "", paramType = "";boolean onload = false;public void parse(XmlPullParser xml) {int eventType = -1;while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {handleStartTag(xml);}else if (eventType == XmlPullParser.END_TAG){handleEndTag(xml);}try {eventType = xml.next();} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}public void handleStartTag(XmlPullParser xml) {String strNode = xml.getName();if (strNode.equals("feature")) {//Check for supported feature sets aka. plugins (Accelerometer, Geolocation, etc)//Set the bit for reading paramsinsideFeature = true;service = xml.getAttributeValue(null, "name");}else if (insideFeature && strNode.equals("param")) {paramType = xml.getAttributeValue(null, "name");if (paramType.equals("service")) // check if it is using the older service paramservice = xml.getAttributeValue(null, "value");else if (paramType.equals("package") || paramType.equals("android-package"))pluginClass = xml.getAttributeValue(null,"value");else if (paramType.equals("onload"))onload = "true".equals(xml.getAttributeValue(null, "value"));}else if (strNode.equals("preference")) {String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.ENGLISH);String value = xml.getAttributeValue(null, "value");prefs.set(name, value);}else if (strNode.equals("content")) {String src = xml.getAttributeValue(null, "src");if (src != null) {contentSrc = src;} else {// DefaultcontentSrc = "index.html";}}}public void handleEndTag(XmlPullParser xml) {String strNode = xml.getName();if (strNode.equals("feature")) {pluginEntries.add(new PluginEntry(service, pluginClass, onload));service = "";pluginClass = "";insideFeature = false;onload = false;}}private String getLaunchUrlPrefix() {if (prefs.getBoolean("AndroidInsecureFileModeEnabled", false)) {return "file:///android_asset/www/";} else {String scheme = prefs.getString("scheme", SCHEME_HTTPS).toLowerCase();String hostname = prefs.getString("hostname", DEFAULT_HOSTNAME);if (!scheme.contentEquals(SCHEME_HTTP) && !scheme.contentEquals(SCHEME_HTTPS)) {LOG.d(TAG, "The provided scheme \"" + scheme + "\" is not valid. " +"Defaulting to \"" + SCHEME_HTTPS + "\". " +"(Valid Options=" + SCHEME_HTTP + "," + SCHEME_HTTPS + ")");scheme = SCHEME_HTTPS;}return scheme + "://" + hostname + '/';}}private void setStartUrl(String src) {Pattern schemeRegex = Pattern.compile("^[a-z-]+://");Matcher matcher = schemeRegex.matcher(src);if (matcher.find()) {launchUrl = src;} else {String launchUrlPrefix = getLaunchUrlPrefix();// remove leading slash, "/", from content src if existing,if (src.charAt(0) == '/') {src = src.substring(1);}launchUrl = launchUrlPrefix + src;}}
}
把htmls改为html
之后找到项目根目录下的config.xml,添加如下代码:
<access origin="*" subdomains="true" />
保存之后再电脑上借一个pad或者手机
运行
cordova run android
就可以看到手机或者pad上出现我们的Vue项目啦!!!!!!!!!!!!
`
把htmls改为html
之后找到项目根目录下的config.xml,添加如下代码:
<access origin="*" subdomains="true" />
保存之后再电脑上借一个pad或者手机
运行
cordova run android
就可以看到手机或者pad上出现我们的Vue项目啦!!!!!!!!!!!!
Cordova + vue 打包安卓(Android) apk相关推荐
- CORDOVA+VUE打包APK文件无法访问数据接口
CORDOVA+VUE打包APK文件无法访问数据接口 CORDOVA+VUE打包后运行APP,但是app中的数据请求都失败了,原因是安装的Android SDK版本较高,默认开启了对非加密明文传输的保 ...
- cordova+vue打包apk
vue+cordova开发移动APP项目 一.环境(版本及配置) 1.node 12.13.1 执行命令查看版本 node -v 显示版本号则安装成功. 2.cordova 9.0.0 执行命令查看版 ...
- Uniapp进行App云打包—安卓Android端
uniapp打包app分2种模式 第一种:云打包,这种是在云上打包,简单方便,直接在hbx就可以直接打包下载 第二种:本地打包,这个比较复杂,还要下载其他东西,我们今天只介绍第一种云打包 云打包过程: ...
- uniapp 打包安卓 Android 抖音app 前端篇~01
文章目录 一.配置 1. 修改后端服务地址 2. 基础配置 3. App图标配置 4. App启动页面配置 5. App模块配置 二.发行 2.1. 云打包 2.2. 云打包配置 2.3. 下载app ...
- uniapp 打包安卓 Android 抖音app 前后端调试篇~03
文章目录 1. 未登录首页浏览短视频 2. 发布视频-云短信登录 3. 发布选择视频 4. 上传短视频到云存储 5. 测试发布视频 6. 个人中心查看发布视频 7. 首页查看刚发布视频 8. 个人中心 ...
- uniapp 打包安卓 Android 抖音app 后端篇~02
文章目录 1. 中间件配置 2. 云短信配置 1. 中间件配置 2. 云短信配置
- Sencha学习笔记2:打包您的第一个Sencha安卓应用apk安装包
通过上一篇翻译的官方文章的介绍我们对sencha有了初步的印象,同时我们也通过该向导生成了第一个示例应用代码框架,那么下一步可能很多人都觉得应该根据该向导所提示的去看一下一个应用是如何建立起来的详细信 ...
- cocos2d for android,cocos2d jsb 打包 Android APK
1.首先要会普通的cpp 打包成Android APK 以下所说的是在cocos2d-x 2.2.2 或者 2.3 版本中.本文在Eclipse总用ndk编译cocos2d-x. 老生常谈cocos2 ...
- Mac打包Android的apk,【ReactNative】Mac下分分钟打包 Android apk
Mac 下 ReactNative如何打包构建Android apk 的应用.该文章还差一个 打包发布到各个平台的教程 总结 打包 jsbundle代码 生成签名 添加签名到app中 打包成apk(打 ...
最新文章
- 【版本更新】网易云信IM微信小程序上线啦!
- 程序员都在用什么高效率的工具?
- 【干货】深度学习中的线性代数---简明教程
- 【Java】Java调用shell脚本
- python安装mysqldb模块_python MysqlDb模块安装及其使用详解
- http://www.blogjava.net/heyang/archive/2010/12/02/
- [原]浅谈几种服务器端模型——反应堆模式(epoll 简介) - _Boz - 博客园
- python的第三方库是干什么用的-Python 常用的标准库以及第三方库有哪些?
- 真核有参转录组测序标准分析-2
- 学生信息管理系统(Java+JSP+MySQL)
- 英文简历的写法和模板
- Linux I2C从设备树信息查看与添加方法
- HDU6130-Kolakoski
- navicat数据库对比 教程
- 【网络协议】TCP和HTTP中keep alive机制
- 学Python最基本20个代码__1
- 怎样才能写出好的读书笔记
- 浅谈设计模式 | 先有鸡还是先有蛋?先有代码后有设计模式还是先有设计模式再写代码?
- mix3android auto,小米MIX3 魔趣OS 安卓10 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
- C++:构造函数和析构函数
热门文章
- 通过C#生成支付宝收款码 一(官方应用创建)
- 【工具】硬核Jupyter Notebook修改默认浏览器(包含易错点)
- 什么是 Windows Admin Center?
- android vts 环境搭建,Android P VTS/GSI 测试配置
- 通达oa考勤可以代打吗_如何使用通达OA同步助手
- DDABresenham
- 最值得收藏的 C++ 清华大学郑莉版全部知识点思维导图整理, 东南大学软件工程初试906科目
- C++ set的应用
- wifi共享精灵2014.04.25.001已经更新,wifi热点中文名走起!
- 华为OD机试真题 C++ 实现【九宫格游戏 / 三阶积幻方】【2022 Q4 | 200分】