GreaterWMS 移动端构建实战:基于 Quasar CLI 与 Cordova 的 Android 打包安装全流程
后端前端企业应用【免费下载链接】GreaterWMSThis Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I start this project . You can share your vacant warehouse space, use it for those in need, and generate income项目地址https://gitcode.com/gh_mirrors/gr/GreaterWMS点击查看免费下载GreaterWMS 是开源仓库中一套完整的仓库管理系统其后端采用 Django REST Framework前端 Web 端基于 QuasarVue 3而移动端PDA/扫码手持终端则由 app 目录下的 Quasar Cordova 工程承载。本文以 app/README.md 中记录的命令行工作流为主线逐条拆解从依赖安装、平台添加、开发调试、生产构建到使用 Google bundletool 生成与安装GWMS.apks的完整链路并结合仓库源码说明 Cordova 插件体系、扫码设备适配等底层细节。读完本文你将能够独立完成 GreaterWMS 移动端在 Android 环境下的构建、打包与真机安装并理解每一步命令背后的作用与产出物。一、构建链路总览app/README.md记录的完整命令序列如下yarn install cordova platform add android cordova platform add ios quasar d -m cordova -T android quasar build -m android bundletool.jar build-apks --bundleapp-release.aab --outputGWMS.apks bundletool.jar install-apks --apksGWMS.apks这条链路可以划分为四个阶段阶段命令产出依赖安装yarn install安装 app/package.json 声明的全部依赖平台初始化cordova platform add android/ios在src-cordova下生成 Cordova 平台工程应用构建quasar d -m cordova -T android/quasar build -m android开发调试包 / 生产app-release.aab打包安装bundletool.jar build-apks/install-apksGWMS.apks及其真机安装其中quasar build -m android是整条链路的枢纽它同时触发 Quasar 前端Vite构建与 Cordova 原生工程编译最终产出 Android App BundleAAB格式的生产包为后续 bundletool 分发做准备。二、环境准备构建移动端所需的前置工具在执行第一条命令之前需要确认本地环境满足 app/package.json 中engines字段声明的最低版本要求engines: { node: ^18 || ^16 || ^14.19, npm: 6.13.4, yarn: 1.21.1 }即 Node.js 14.19 / 16 / 18 任一主版本包管理器建议使用 Yarn 1.21.1 及以上yarn install是 README 中的标准入口仓库根目录也提供了 yarn.lock 锁定依赖版本。构建 Android 目标还需要Quasar CLIquasar/cli提供quasar ddev 开发与quasar build生产构建两条核心命令Cordova CLIcordova负责platform add、原生工程编译等操作JDK 与 Android SDKCordova Android 平台仓库锁定cordova-android^10.1.2见 app/src-cordova/package.json需要 JDK 11 与 Android SDK含 build-tools、platform-toolsGradle 会在首次构建时自动下载adb用于真机连接是install-apks阶段与设备通信的前提bundletool.jarGoogle 官方发布的 Android App Bundle 构建/安装工具可通过官方发布渠道下载 jar 包后按文档方式调用。值得说明的是app/quasar.config.js 的build.target将浏览器目标设定为es2019/edge88/firefox78/chrome87/safari13.1node目标为node16这意味着移动端 WebView 需要支持 ES2019 语法现代 Android WebView 均可满足。三、第一步安装依赖并初始化 Cordova 平台3.1 安装前端依赖在app目录下执行yarn install该命令依据 app/package.json 安装运行时依赖与开发依赖其中与移动端构建直接相关的是运行时quasar^2.6.0、vue^3.0.0、vue-router^4.0.0、vuex^4.0.1、axios^0.21.1、vue-i18n^9.0.0构建工具链quasar/app-vite^1.0.0Quasar Vite 版 CLI 插件、intlify/vite-plugin-vue-i18n^3.3.1i18n 资源编译、eslint、prettier等。仓库的 app/src/i18n 目录下包含 11 种语言的翻译资源zh-hans、en-US、ja、de、fr、it、pt、ru、sp、ar、zh-hant这些资源通过intlify/vite-plugin-vue-i18n在构建时被预编译具体配置见 app/quasar.config.js。3.2 添加 Android / iOS 平台cordova platform add android cordova platform add ios这两条命令会在 app/src-cordova 目录下生成对应的原生平台工程platforms/android、platforms/ios。需要注意的是iOS 平台仅在 macOS 上可用且需要 Xcode 工具链Windows/Linux 环境只需执行cordova platform add android跳过 ios 命令即可平台命令是幂等的重复执行会提示平台已存在当前仓库在 app/src-cordova/package.json 中登记的平台为androidcordova.platforms列表仅包含androidiOS 平台为按 README 指令可选添加。添加平台后Cordova 会根据 app/src-cordova/config.xml 与插件清单把下列插件注入原生工程依据 app/src-cordova/plugins/android.json 的installed_plugins与dependent_plugins插件用途phonegap-plugin-barcodescanner通用相机条码扫描参数ANDROID_SUPPORT_V4_VERSION27.cordova-plugin-device获取设备型号/厂商用于扫码设备识别cordova-plugin-battery-status电量状态监听cordova-plugin-dialogs原生对话框cordova-plugin-insomnia保持屏幕常亮cordova-plugin-splashscreen启动闪屏控制cordova-plugin-vibration扫描成功震动反馈ionic-plugin-keyboard键盘控制com-darryncampbell-cordova-plugin-intentIntent 广播Zebra DataWedge 通信cordova-plugin-idatascanner/cordova-plugin-seuic-scanneriData / SEUIC 厂商扫描头接入四、第二步开发模式调试quasar dquasar d -m cordova -T android该命令以开发模式启动移动端调试-m cordova指定 Quasar 以 Cordova 模式运行-T android--target的缩写指定目标平台为 Android。执行后 Quasar 会启动 Vite 开发服务器并通过 Cordova 把应用打包成调试 APK 安装到已连接的 Android 设备或模拟器上。开发模式下支持 HMR热更新app/quasar.config.js 中的devServer.open: true会在 Web 模式自动打开浏览器而在 Cordova 模式下则由原生 WebView 加载。开发模式下app/src-cordova/config.xml 中android平台的偏好设置会生效preference nameAndroidPersistentFileLocation valueCompatibility / preference nameAndroidInsecureFileModeEnabled valuetrue /AndroidInsecureFileModeEnabledtrue允许应用在非 HTTPS 环境下加载本地资源这对开发调试阶段连接本地后端服务尤为关键。此外全局偏好中AutoHideSplashScreenfalse与SplashScreenDelay10000表示闪屏不会自动隐藏而是由应用逻辑在deviceready后手动控制配合 quasar.config.js 中cordova.backButtonExit: true、backButton: true的返回键行为配置。五、第三步生产构建quasar build -m androidquasar build -m android这是产出正式安装包的核心步骤它完成两件事Quasar/Vite 前端构建将 app/src 下的 Vue 组件、i18n 资源、SCSS 样式编译为生产静态资源开启 gzip 压缩见 app/quasar.config.js并注入到 Cordova 的www目录对应 app/src-cordova/www其中index.html的入口由 app/index.html 模板生成模板在 Cordova 模式会追加viewport-fitcover以适配刘海屏Cordova/Gradle 原生编译将www资源与 Android 原生壳打包最终在app/src-cordova/platforms/android下产出app-release.aabAndroid App Bundle。与quasar d相比quasar build -m android默认产出 release 签名配置对应的 AAB 包这也是 README 下一步--bundleapp-release.aab直接引用该文件名的原因。若需生成传统 APK可配合 Cordova 的--apk类参数调整产物格式具体以所用 Quasar CLI 版本的能力为准。构建完成后应能在src-cordova/platforms/android的相关outputs/bundle/release目录下找到app-release.aab。移动端应用的应用 ID 由 app/src-cordova/config.xml 定义widget idorg.greaterwms.scanner.app version2.1.48 ...即包名为org.greaterwms.scanner.app版本号与 app/package.json 中的version: 2.1.48保持一致。六、第四步用 bundletool 生成并安装 APKS 套件Android App Bundle 不能直接安装到设备必须先用 bundletool 按设备配置拆分出 APK 集合APKS再分发或安装。6.1 生成 APKSbundletool.jar build-apks --bundleapp-release.aab --outputGWMS.apks--bundle指定上一步产出的 AAB 文件--output指定输出文件README 中命名为GWMS.apks。GWMS.apks本质是一个包含多个 APKbase、split、可能包含多种 ABI 与语言资源变体的 zip 集合。它利用 AAB 的按需分发特性只为目标设备下载必要的内容从而缩小安装体积。6.2 安装 APKSbundletool.jar install-apks --apksGWMS.apks该命令通过 adb 将GWMS.apks中匹配当前设备配置的 APK 集合安装到已连接的设备。若同时连接了多台设备可追加--device-idserial指定目标设备该参数为 bundletool 的标准用法README 未列出属可选增强项。install-apks完成后手机上即可看到名为GWMS的应用name定义于 app/src-cordova/config.xml。6.3 关于签名生产发布时app-release.aab需要携带有效的 release 签名。开发环境下 Cordova 默认使用 debug 签名若要正式上架或发布给团队内部使用需要按 Android 官方流程配置签名密钥Keystore并对 release 构建进行签名。README 中的命令序列未包含签名配置细节属于发布前需自行补齐的环节此处仅作提醒。七、iOS 平台构建说明README 中的cordova platform add ios仅在 macOS Xcode 环境下可完整执行。仓库在 app/src-cordova/config.xml 中为 iOS 平台准备了完整的图标40 至 1024 像素共 12 种尺寸与启动屏资源并通过edit-config向Info.plist合并了相机权限声明edit-config file*-Info.plist modemerge targetNSCameraUsageDescription stringTo scan barcodes/string /edit-config由于phonegap-plugin-barcodescanner依赖相机进行扫码iOS 若无此权限描述会在调用扫码时被系统拒绝因此该配置是 iOS 上扫码功能可用的前提。iOS 侧构建流程quasar build -m ios后用 Xcode 归档导出超出了本文 Android 主线的范围此处仅作说明。八、源码纵览Cordova 配置如何支撑 PDA 扫码业务移动端应用的核心业务是扫码ASN 收货、DN 发货、盘点等app/src/pages/ScanAPP.vue 集中体现了 Cordova 插件与设备的协同方式可作为理解为什么要按上述方式构建的源码证据。8.1 按厂商适配扫描头在ScanAPP.vue的onMounted中应用通过cordova-plugin-device读取设备厂商按需加载不同厂商的扫描头驱动app/src/pages/ScanAPP.vueif (window.device.manufacturer Zebra Technologies) { scanner.initialize() } else if (window.device.manufacturer SEUIC) { seuicDevice() } else if (window.device.manufacturer iData) { iDataDevice() }Zebra斑马通过com-darryncampbell-cordova-plugin-intent与 DataWedge 服务通信动态调用com.symbol.datawedge.api.SET_CONFIG等 API 创建/更新扫码 Profilewms并将扫描结果通过com.zebra.cordovademo.ACTION广播回传app/src/pages/ScanAPP.vueSEUIC / iData分别对接cordova-plugin-seuic-scanner与cordova-plugin-idatascanner两个厂商原生插件。8.2 通用相机扫码兜底对于非上述厂商的普通 Android 手机MobileScan()调用phonegap-plugin-barcodescanner打开相机扫码并附带preferFrontCamera: false、showFlipCameraButton: true、showTorchButton: true等参数扫描成功后触发震动反馈app/src/pages/ScanAPP.vuecordova.plugins.barcodeScanner.scan( function (result) { bar_check.value result.text; navigator.vibrate(100) }, function (error) { navigator.vibrate(100) }, { preferFrontCamera: false, showFlipCameraButton: true, showTorchButton: true, disableSuccessBeep: false } );扫描到的条码随后通过axios携带token、language、operator请求后端scanner/list/code/接口解析业务单据类型ASN/DN/GOODS/BINSET见 app/src/pages/ScanAPP.vue。这些交互全部依赖本文前面构建出的 Cordova 原生环境——这也是为什么该工程必须经由quasar build -m android bundletool 完整走一遍才能交付可用的移动端。九、常见问题与注意事项命令必须在 app 目录下执行yarn install、cordova、quasar系列命令均以 app 为工作目录该目录是独立的 Quasar 前端工程区别于 templates 的 Web 管理端工程后者由 web_start.sh 以quasar build/quasar d驱动。Android SDK 环境变量确保ANDROID_HOME或ANDROID_SDK_ROOT已正确配置否则cordova platform add android或 Gradle 编译会失败。首次构建慢Gradle 首次运行需下载依赖与 Android 构建工具耗时较长属正常现象。设备连接install-apks前确认adb devices能识别目标设备开启 USB 调试多设备场景指定--device-id。iOS 只能在 macOS 构建cordova platform add ios与后续 iOS 构建依赖 XcodeWindows/Linux 上应跳过。相机权限Android 6.0 运行时权限由phonegap-plugin-barcodescanner在调用扫码时自动申请iOS 需要 config.xml 中的NSCameraUsageDescription声明。十、小结从 app/README.md 的七条命令出发本文完整还原了 GreaterWMS 移动端的构建链yarn install装依赖 →cordova platform add建原生壳 →quasar d -m cordova -T android调试 →quasar build -m android出 AAB →bundletool拆包安装。结合 app/quasar.config.js、app/src-cordova/config.xml 与 app/src/pages/ScanAPP.vue 的源码细节可以看出这套构建流程之所以如此设计是为了支撑多厂商 PDAZebra/SEUIC/iData与普通手机的扫码业务。按此流程操作即可在真机上获得可运行的 GWMS 扫码应用。赞分享后端前端企业应用【免费下载链接】GreaterWMSThis Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I start this project . You can share your vacant warehouse space, use it for those in need, and generate income项目地址https://gitcode.com/gh_mirrors/gr/GreaterWMS点击查看免费下载相关推荐Yakit 统一工程化 CLI 实战指南基于 cli/cli.mjs 的启动、构建与打包全解析Yakit 统一工程化 CLI 实战指南基于 cli/cli.mjs 的启动、构建与打包全解析 本指南以仓库内的 cli/README.md https://网络安全应用安全渗透测试漏洞扫描WinMerge 安装程序构建指南基于 Inno Setup 的 Installer 打包全流程WinMerge 安装程序构建指南基于 Inno Setup 的 Installer 打包全流程 本文面向需要从源码构建 WinMerge 安装包的开发者和发桌面应用开发工具Meteor 移动端开发完全指南基于 Cordova 的 iOS/Android 应用构建、调试与发布Meteor 移动端开发完全指南基于 Cordova 的 iOS/Android 应用构建、调试与发布 导读 本文以 Meteor 官方指南中的 Cordov后端前端开发工具移动开发上一篇5分钟写出第一条HaE规则标记与提取的实用实战指南下一篇WAS Node Suite 模型权重指南下载机制、目录布局与各模型族部署实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从Apollo-11代号项目到可复现工程:逆向拆解与改造指南

从Apollo-11代号项目到可复现工程:逆向拆解与改造指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:32:41 阅读更多 →
rospack depends1 报错排查:ROS依赖查询与环境变量配置实战

rospack depends1 报错排查:ROS依赖查询与环境变量配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:32:41 阅读更多 →
Vue2多页面应用模板:从vue.config.js到webpack配置的完整实践

Vue2多页面应用模板:从vue.config.js到webpack配置的完整实践

简介:Vue 2.0多页面应用模板面向需要同时维护多个独立页面的前端开发场景,旨在解决传统单页应用在官网、专题页等多入口项目中重复搭建构建流程、难以统一工程化配置的问题。资源包共32个文件,压缩后仅31KB,包含15个JavaScript脚本…

2026/10/15 3:32:41 阅读更多 →

最新新闻

IDEA 2025.3 新功能实战:多光标、调试数据流与临时文件提升编码效率

IDEA 2025.3 新功能实战:多光标、调试数据流与临时文件提升编码效率

IDEA 2025.3 的更新日志刚出来那会儿,我真没当回事,毕竟每个大版本都爱说“更快、更智能、更好用”。直到上周把开发环境从旧版本升上来,试了一圈新功能,才意识到这波“骚操作”是真的多,甚至有点跟不上了。这篇文章不…

2026/10/15 4:27:50 阅读更多 →
贝叶斯网络学习指南:从结构、参数到推断的完整实践

贝叶斯网络学习指南:从结构、参数到推断的完整实践

简介:《贝叶斯网络学习指南》是一份面向机器学习、概率建模与数据科学初学者的PDF电子书,系统覆盖从概率论基础到贝叶斯网络建模、推理与参数学习的完整知识链。全书从概率函数与空间、条件概率与独立性、贝叶斯定理、随机变量及联合概率分布讲起&#x…

2026/10/15 4:27:50 阅读更多 →
STM32F072C8T6裸机开发实战:从寄存器到USB/CAN外设

STM32F072C8T6裸机开发实战:从寄存器到USB/CAN外设

简介:这份资料面向嵌入式初学者与有一定经验的开发者,围绕意法半导体STM32F072C8T6(ARM Cortex-M0内核、48MHz主频、32KB闪存与2KB RAM)学习板展开,帮助读者快速掌握该芯片的初始化配置、中断处理、内存管理及驱动编写…

2026/10/15 4:27:50 阅读更多 →
C/C++不同位数数据互转的进制转换实现与避坑指南

C/C++不同位数数据互转的进制转换实现与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:27:50 阅读更多 →
NC65销售订单批量导入全攻略:从模板准备到成功入库的避坑指南

NC65销售订单批量导入全攻略:从模板准备到成功入库的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:27:50 阅读更多 →
Linux下C/C++动静态库制作与使用实战指南

Linux下C/C++动静态库制作与使用实战指南

长期以来在Linux下做C/C开发,动静态库始终是绕不开的一个核心技能。无论是自己封装模块、分发二进制产物,还是处理第三方依赖,理解库的制作与使用直接决定了你在编译链接这块能不能少掉头发。我见过不少开发者写业务逻辑很熟练,一…

2026/10/15 4:26:50 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →