通过uniapp将vite vue3项目打包为android系统的.apk包,并实现可自动升级功能

uni-app项目创建到安卓APK打包保姆级实操教程 移动开发领域,跨平台框架一直是降低多端交付成本的关键。uni-app凭借Vue语法和一码多端理念,将微信小程序、H5和安卓App的开发入口统一,其核心原理是通过编译期转换和条件编译,将一套代码按目标平台生成对应产物。这种模式对资源有限的小团队尤其有价值,能够显著缩短产品验证周期。典型的应用场景包括快速搭建小程序前端、同步输出H5版本以及发布安卓安装包。而实际落地时,从开发工具配置、pages.json与manifest.json设置,到证书签名与APK打包,每一步都暗藏细节。本文以完整实操视角,系统梳理un 阅读详情

打包vue项目,注意vite.config.ts文件和路由文件设置

vite.config.ts,将base等配置改为./

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// import vueDevTools from 'vite-plugin-vue-devtools'

// https://vite.dev/config/
export default defineConfig({
  base: './', // Android打包配置
  server: {
    host: '0.0.0.0',
  },
  plugins: [
    vue(),
    // vueDevTools(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  define: {
    __BASE_URL__: JSON.stringify('./'), // Android打包配置
  },
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
  }
  
})

路由文件配置:router/index.ts

import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
const router = createRouter({
  // Android打包将其换成createWebHashHistory,平时使用createWebHistory
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    // 路由配置
  ],
})
// 路由守卫
router.beforeEach((to, from, next) => {});

export default router

将上述两个文件配置完成后,注意axios请求地址改用生产环境url,随后打包vue项目

打开HBuilder X编辑器,创建5+App项目,并将打包好的vue项目所有文件放入即可

  1. 打开HBuilder X编辑器,文件->新建->项目
    在这里插入图片描述
    在这里插入图片描述
  2. 将打包后的vue代码全部粘贴到新创建的5+App项目中
    在这里插入图片描述

Android自动更新配置

  1. 目前最新系统版本信息接口
@GetMapping("/getVersions")
public ResultJson getVersions(){
    Map<String, Object> data = new LinkedHashMap<>(); // 保持字段顺序
    data.put("versionCode", 2);                      // 当前版本号整型,每次递增
    data.put("versionName", "v2.0.0");                // 用户可见版本
    data.put("downloadUrl", "http://www.xxx.com/download.apk"); // 真实APK地址
    data.put("updateLog", "1. 优化性能 2. 修复已知BUG");
    data.put("isForceUpdate", 0);                // 是否强制更新

    return data;
}
  1. 创建js/app.js文件,代码如下
document.addEventListener('plusready', function() {
  // 确保5+环境就绪
  checkUpdate();
});

function checkUpdate() {
  // 获取目前最新版本、更新内容、最新android包接口
  const serverVersionUrl = 'http://www.xxx.com/server/getVersions';
  plus.runtime.getProperty(plus.runtime.appid, async (info) => {
    try {
		
      const res = await fetch(serverVersionUrl);
      const data = await res.json();
	  
	  // alert(JSON.stringify(data) + info.versionCode)
	  
      
      if (data.data.versionCode > info.versionCode) {
        showUpdateDialog(data.data);
      }
    } catch (e) {
      console.error('更新检查失败:', e);
    }
  });
}

function showUpdateDialog(updateInfo) {
  plus.nativeUI.confirm(
    `发现新版本 ${updateInfo.versionName}\n更新内容:${updateInfo.updateLog}`,
    (btn) => {
      if (btn.index === 0) { // 用户点击确定
		
        downloadApk(updateInfo.downloadUrl);
		
      } else if (updateInfo.isForceUpdate) {
        plus.runtime.quit();
      }
    },
    {
      title: "更新提示",
      buttons: ["立即更新", updateInfo.isForceUpdate ? "" : "取消"]
    }
  );
}

function downloadApk(url) {
	createPopup();
	
	const dtask = plus.downloader.createDownload(
		url,
		{ filename: '_downloads/update.apk' },
		(d, status) => {
			
			// progressDialog.close(); // 下载完成后关闭对话框
			if (status === 200) {
				plus.runtime.install(d.filename);
			} else {
				plus.nativeUI.alert('下载失败');
			}
		}
	);
	// 监听下载进度
	  dtask.addEventListener("statechanged", (task, status) => {
		  const percent = Math.floor((task.downloadedSize / task.totalSize) * 100);
		  console.log("下载中,当前进度=" + percent);
		  
		  if(percent == 100){
			  removeProgressContainer();
		  }else{
			  if(Number(percent) >= 0){
				changeProgress(percent);
			  }
			  
		  }
	  });
	
	
	dtask.start();
}

function createPopup(){
	var div = document.createElement("div");
	div.id = "progress_container";
	div.style.position = "fixed";
	div.style.top = "0";
	div.style.left = "0";
	div.style.width = "100%";
	div.style.height = "100%";
	div.style.backgroundColor = "rgba(0, 0, 0, 0.7)";
	div.style.zIndex= "99999";
	var p = document.createElement("p");
	p.style.color = "white";
	p.style.fontSize = "24px";
	p.style.textAlign = "center";
	p.style.marginTop = "100px";
	p.innerHTML = "系统更新中,请稍等...";
	div.appendChild(p);
	document.body.appendChild(div);
	// 添加进度条元素
	var progress = document.createElement("p");
	    progress.style.color = "white";
	    progress.style.fontSize = "28px";
	    progress.style.textAlign = "center";
	    progress.id = "progress";
	    progress.innerHTML = "0%";
		progress.style.marginTop = "20px";
	    div.appendChild(progress);
}
function changeProgress(percent){
	var progress = document.getElementById("progress");
	progress.innerHTML = percent + "%";
}
function removeProgressContainer(){
	var dom = document.getElementById("progress_container");
	if (dom) {
	    dom.parentNode.removeChild(dom);
	}
}
  1. 在index.html中引入js/app.js,注意放置位置
    在这里插入图片描述
    效果图
    在这里插入图片描述

在这里插入图片描述
4. 其他配置,注意配置应用版本,每次最新的版本要比上一次的高
基础配置
在这里插入图片描述
图标配置
在这里插入图片描述

应用调试

在这里插入图片描述

方式一:真机调试;使用数据线连接电脑与手机,并开启开发人员选项和USB调试
方式二:模拟器调试;参考:https://blog.youkuaiyun.com/admin_web/article/details/150529166?spm=1011.2415.3001.5331

发行

注意:要想实现升级功能,必须保持证书一致,所以这里使用自有证书,在生成证书时注意证书有效期最好时间长点,证书别名、密码、以及生成的证书文件分别填入下方框内

如何生成证书 :安装jdk环境运行keytool -genkey命令即可
在这里插入图片描述
在这里插入图片描述

HBuilderX打包APP全攻略:从云打包到上架避坑指南 跨端开发是移动应用降本增效的重要方式,HBuilderX作为主流工具,将前端代码编译为原生安装包的核心原理在于把H5页面嵌入原生壳并通过桥接层调用设备能力。这一技术价值在于开发者无需掌握Android Studio或Xcode即可产出APK、IPA,尤其适合uniapp项目。实际应用中,从uniapp怎么打包到hbuilderx安装教程,再到云打包证书配置、离线打包、微信小程序发行等环节,常遇到端口占用、布局异常、抓包失败等工具链问题。掌握这些基础概念和常见报错排查方法,能大幅缩短从开发到上架的路径,让跨端 阅读详情

相关推荐

uni-app版本不匹配排查:HBuilderX与手机端SDK对齐指南

在跨端应用开发中,编译工具链与运行时环境往往独立演进,版本一致性是保障原生能力调用稳定的基础。所谓版本匹配,本质是让编译期产物与设备端原生SDK在接口签名、组件能力和运行时协议上保持同步;一旦错位,就可能出现白屏、nvue样式异常、原生插件返回undefined等问题。对uni-app App开发而言,HBuilderX、CLI依赖与手机端SDK分别决定不同环节,标准基座、自定义基座和离线打包的版本来源也各不相同。建立版本基线、用uvm统一依赖、重装或重制基座,能显著降低排查成本。版本不匹配弹窗正是这一机制

weixin_34198881的博客 365

Uniapp+Vite+Vue3+Electron 快速构建桌面应用(三)---打包

先说结论,重点还是在于 打包后还是加载http://localhost:3000是无法运行的,因此需要在打包前拿到文件的真实路径为了代码能够根据不同环境在运行时加载http://localhost:3000,在打包时加载文件,此处需要使用环境变量来切换生产和开发环境。该库让开发者只需要注重环境变量的设置,而无需担心平台设置 2. 编辑 : 2. 编辑 , 三. 打包并分发应用程序 1. 使用 2. 使用 的 make 命令来创建可分发的应用程序 Electron-forge 会在根目录下创

米六的博客 2553

Vue组件钩子即事件:重构生命周期为可监听、可组合的标准化事件流

在前端工程化演进中,组件生命周期不再仅是内部执行逻辑,而正逐步升维为可订阅、可拦截、可跨框架通信的标准化事件流。其底层原理源于将 created、mounted 等钩子抽象为 CustomEvent 协议,实现松耦合协作与可观测性增强;技术价值在于突破 props/drills 通信瓶颈、统一微前端/COM/ActiveX 集成协议、并赋能 DevTools 可视化调试;典型应用场景涵盖工业监控异常链路追踪、银行柜面系统跨语言集成、以及 UniApp Android APK 状态同步修复——当 `event

weixin_33898876的博客 370

测试使用vite搭建的uni-app打包app区分开发环境和生产环境

用脚手架搭建的uniapp项目,打包H5和小程序可以和web端一样,能够通过env.dev和env.prod区分开发环境和生产环境,但是不知道打包成app时如何区分开发环境和生产环境,在此做一个测试记录。在手机上安装打包好apk程序后进入app界面就可以看到页面上显示的title是“生产地址”了,所以按照这样的流程可以做到打包app时,可以通过不同的执行脚本切换api地址。整体思路是我的prod文件里有一个生产地址,然后我在页面里尝试打印出来,然后最后打包成app看页面的打印结果是否切换成了生产地址。

阿琰a_的博客 1753

使用UniApp、Vue 3和Vite实现多环境打包

我们通过配置环境变量、使用Vite进行打包,并在Vue组件中使用环境变量来实现不同环境下的API地址切换。在本文中,我们将探讨如何使用UniApp、Vue 3和Vite构建一个前端应用,并实现多环境的打包功能。我们将使用UniApp作为跨平台的开发框架,Vue 3作为主要的JavaScript框架,以及Vite作为打包工具。这将使用Vite进行打包,并根据当前环境的配置进行构建。的环境变量,它将根据不同的环境指向不同的API地址。文件中的环境变量,并将其注入到代码中。上面的代码中,我们使用了。

AvskBug的博客 2635

uniapp优化之路(一) 如何在 uniapp+vue3+vite 项目中查看打包后的依赖大小

在进行 uniapp、Vue3 和 Vite 开发时,随着项目的增大,我们可能会遇到打包后的文件过大或者依赖过重的问题。:通过这个插件,可以生成打包报告,帮助你可视化每个模块的体积和依赖关系,方便我们定位项目中体积较大的依赖。,打包完成后会自动打开浏览器,显示一个依赖可视化的报告,帮助你查看项目中各个模块的大小。插件,用于自动化的 CSS 提取,避免了多余的 CSS 导入。,以便在打包时查看依赖的大小,帮助你做出优化。来可视化打包后的依赖大小,从而找出瓶颈。接下来,我们修改项目中的。,以及其他的依赖包。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 661

uniapp 打包 App 报错(vue3)

报错:Invalid value "iife" for option "output.format" - UMD and IIFE output format。解决方案: 把项目中的defineAsyncComponent替换掉。

Shiqi_777的博客 5424

Material Studio 2024安装避坑指南:从证书配置到权限设置的完整解决方案

本文详细解析了Material Studio 2024的安装流程,从环境准备到权限优化的完整解决方案。针对证书配置、系统权限和计算服务等常见问题,提供了12个关键风险点的避坑指南,帮助科研工作者高效完成安装,提升材料模拟工作的效率。

moon9的博客 773

uni-app系列(一)用cli创建支持Vue3/Vite的uni-app项目

更新HBuilderX编译器到3.3.0+,HBuilderX 3.3.0+的编辑器支持基于 Vite 编译到小程序平台。 至此,uni-app在App/H5/小程序全平台支持Vue 3.0开发,且全平台支持Vite编译器。 用cli创建支持Vue3/Vite的uni-app项目 1、命令行创建 Vue3/Vite 工程 # 创建以 javascript 开发的工程 npx degit dcloudio/uni-preset-vue#vite my-vue3-project # 创建以 types

清风明月的博客 3995

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

液晶电视维修必看:TCON逻辑板故障排查全指南(附常见问题解决方案)

本文详细解析了液晶电视TCON逻辑板的工作原理与故障排查方法,涵盖LVDS信号处理、DC-DC电压系统等核心知识。提供从基础测量到高级维修的完整指南,帮助技术人员快速诊断黑屏、竖线等常见故障,并给出预防性维护建议,提升维修效率与成功率。

weixin_42535461的博客 616

Uniapp 鸿蒙实战之 AtomGit APP - 环境搭建与项目初始化

随着鸿蒙系统的快速发展,越来越多的开发者开始关注鸿蒙应用开发。一次开发,多端运行:使用 Vue 语法,可同时构建鸿蒙、Android、iOS、H5 等多端应用生态成熟:Uniapp 拥有丰富的插件市场和完善的文档支持学习成本低:熟悉 Vue 的开发者可快速上手鸿蒙原生支持:Uniapp 已正式支持鸿蒙平台,可直接编译为鸿蒙应用AtomGit 是一款专为开发者打造的 Git 客户端,支持仓库浏览、代码查看、Issue 管理等核心功能。

2502_92709686的博客 299

特征图与token的区别以及两者之间的转换

特征图和token之间的联系以及两者之间的转换

mariodf的博客 1012

不靠钉钉飞书,我把一套完整的 OA 系统写出来了:审批、考勤、IM、视频会议、文档协作

一款基于SpringBoot+Vue3+UniApp的国产化企业办公自动化系统,集成AntFlow流程引擎,支持复杂审批场景如会签、转办、退回等,覆盖请假、出差等常用流程。具备三班倒、大小周考勤管理,支持移动打卡与排班可视化。融合即时通讯、音视频会议、在线文档协作,并引入AI写作、文生语音/视频/海报、AI知识库等智能功能。前后端分离,多端覆盖(PC、微信小程序、Android/iOS),助力企业高效协同与数字化转型。

FinelyYang的专栏 1591

24. SAP 标准产品里使用 OData 服务的一些细节分享

笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。 因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。 同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2031

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

JeeSite后端开发手册(脚手架)

JeeSite是济南卓源软件推出的Java快速开发平台,基于SpringBoot、Shiro、MyBatis等技术栈,支持Vue3/Beetl双前端架构。平台提供代码生成器、微服务支持,并兼容国产化软硬件环境。快速启动方式包括:1)拉取Git代码;2)直接运行web-fast模块(含H2数据库);3)通过内置账号访问系统。移动端支持APK直接安装或AndroidStudio打包。平台采用模块化设计,包含web(传统前端)、web-vue(Vue分离前端)、web-api(接口服务)等多个功能模块,并支持AI

xiaosongde优快云的博客 264

PyTorch实战(12)——图神经网络(Graph Neural Network,GNN)

在本节中,我们首先简要概述了图神经网络 (Graph Neural Network, GNN) 的核心概念与应用,GNN 通过构建计算图分层聚合节点特征,解决了传统神经网络处理图数据时的四大局限:信息深度不足、节点顺序敏感、动态扩展困难和特征稀疏性问题。了解了不同类型的图学习任务(包括节点级、边级和图级三大类)。接着我们研究了几种流行的 GNN 模型,包括:GCN (通过权重共享实现图卷积)、GAT (引入注意力机制区分邻居重要性)和 GraphSAGE (采用随机采样应对大规模图)。

盼小辉丶的博客 3668

uni-app HBuilderX与手机端SDK版本不匹配排查修复

编译工具链与运行时原生容器是移动应用工程里的两个独立版本域,接口桥接、生命周期和原生能力调用都依赖二者协议一致。以 uni-app 为例,HBuilderX 或 CLI 编译出的 JS 代码,需要手机端内嵌 SDK 提供原生容器支撑;一旦编译侧与运行侧版本错位,就可能出现白屏、plus API 未定义、原生插件静默失效,甚至只在部分机型复现。其技术价值在于把环境问题前移到可量化的版本清单、锁定依赖与构建校验。应用场景覆盖真机调试、云打包、离线打包和 CI 流程。围绕 HBuilderX 与手机端 SDK版本

weixin_33795093的博客 294

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vue3+Uniapp小程序自动化打包上传

使用 vue-cli 搭建的小程序, 当项目开发完成后,需要打包上传小程序代码:在命令行执行打包小程序,然后在对应平台的【开发者工具】导入 dist/build/mp-xxx 文件夹,打开项目,上传小程序。流程较多, 比较繁琐。所以采用小程序自动化打包上传并且集成到发布平台实现真正的一键上传。

weixin_43218691的博客 1446

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

uniapp 多环境配置打包,比较优雅的解决方案,全网相对优解

读取.env.[development|test|staging|production]配置文件进行打包的方案 我们如果有多个环境开发需求和打包需求,尤其是配置多个环境的接口请求地址等配置。针对这种情况,我在网上找了很多相关的资料,基本都是命令行的方案,使用uniapp的scripts方案也有,但是是把配置信息写到scripts上的,这解决方案也不够优雅,如果有多个配置就显得很拥肿了。

u012308481的博客 2530

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【vue3】uniapp 微信小程序 打包优化【超详细】

✨踩坑不易,还希望各位大佬支持一下\textcolor{gray}{踩坑不易,还希望各位大佬支持一下}踩坑不易,还希望各位大佬支持一下📃个人主页:\textcolor{green}{个人主页:}个人主页:沉默小管📃个人网站:\textcolor{green}{个人网站:}个人网站:沉默小管📃个人导航网站:\textcolor{green}{个人导航网站:}个人导航网站:沉默小管导航网🔥技术交流QQ群:837051545。

我的开源项目:https://gitee.com/derekgo/vue-cms_xg 5737

uniapp + vue3 + vite 环境变量配置

uniapp3与vite的环境变量配置的两种方案

MockingBHM的博客 1万+

【无标题】

vue3使用的是vite进行打包的,而uni-app官方文档中在manifest.json配置跨域是使用webpack的。而vite和webpack的跨域重写路径参数是不一样的。有可能是这种原因导致失败的。uniapp项目中最开始直接在manifest.json配置文件中配置h5的跨域,使用pathRewrite重写路径时失败。这个时候就不用到manifest.json配置文件中进行配置跨域了,直接在跟目录添加vite.config.js配置文件配置跨域。

Toughb的博客 1066

uni-app5+app打包,vue3开发vite.config.js的配置

targets: ['defaults', "ie >= 11", 'chrome 52'], // 需要兼容的目标列表,可以设置多个。// targets:['chrome 52', "defaults" ,"ie 11"], // 需要兼容的目标列表,可以设置多个。/* 1.下面的注释打开,荣耀平板可以用,注释掉小米联想平板可以用 *//* 2.下面的注释打开,荣耀平板可以用,注释掉小米联想平板可以用 */// publicPath: './',/*配置打包后的资源路径*//* 打包压缩 */

qq_38687592的博客 2298
上一篇: uniapp 5+App项目,在android studio模拟器上运行调试
下一篇: springboot项目使用websocket功能,使用了nginx反向代理后连接失败问题解决
if时光重来
博客等级 码龄8年 248粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值