Matlab共享App有三种方式:
第一种方式实际是将App打包为Matlab工具箱,需要用户安装Matlab才能进行工具箱的安装与使用,并且此方式会暴露源码,比较适用团队内部共享。第二种方式没有尝试过,不做讨论。本文介绍如何将Matlab App Designer开发的应用程序打包为独立的桌面应用程序即独立桌面 App即第三种方式,这种方式是最具有鲁棒性和独立性的打包方式,这里以我的TEToolBox为例。
1.TEToolBox打包
首先放一下目录结构,Login.mlapp 为实现登录逻辑的App也是打包时的主App即打开TEToolBox.exe时该文件里的代码先执行,Dialog.mlapp 为对话框逻辑,用于警告、错误提示等,为了应用的风格比较相近没有使用Matlab自带的对话框。TEToolBox.mlapp 自然就是用于热电模型计算的核心App,登录成功之后会跳转执行该App,images 里面保存了登录页面所用的背景图和一些图标,loginfiles 里面同样保存了实现登录逻辑所需的文件,examples 里面保存了示例文件供用户参考。
接下来是打包流程,在Matlab中打开 Login.mlapp,然后选择 独立桌面 App
点击之后弹出打包页面,拆解一下,先看顶部区域,MAIN FILE 代表了应用程序的入口,即前面提到的主App,这也是为什么在 Login.mlapp 页面打包,因为 Matlab 会将执行打包的App作为默认的主App,当然你可以在此区域自行更改 MAIN FILE;PACKAGING OPTIONS 为打包的方式,第一种为用户安装时自己从网上下载程序运行的 MCR (Matlab Runtime,Matlab运行时库,运行时库保证了用户在没有安装Matlab的情况下,依然可以编译、运行你所开发的App),第二种方式是直接将MCR打包进安装包中,用户仅需要安装即可使用,不需要自己安装,另外你可以在后面的输入框中修改安装程序的名字,个人建议采用第二种方式,缺点是程序包会大一些,用户自己安装很容易因为网络问题导致安装失败,或者安装的版本不匹配导致无法运行。
如果你不想每次打包都重新下载MCR,建议先下载到本地,然后打包时Matlab会从默认路径寻找该MCR并打包进App中。在线下载命令如下,
compiler.runtime.download
# Downloading MATLAB Runtime installer. It may take several minutes...
# MATLAB Runtime installer has been downloaded to:
# 默认安装路径
# "C:\Windows\TEMP\Su\MCRInstaller24.1\MATLAB_Runtime_R2024a_win64.zip"
如果速度太慢或下载失败,你也可以手动下载,两者的区别是在线下载会自动识别并下载与你的Matlab版本匹配的MCR。
然后设置TEToolBox.exe的相关信息,具体内容在图中已经详尽
配置默认安装路径,即不指定安装路径的情况下,TEToolBox.exe默认安装的位置
Matlab会默认加载一些依赖文件,但是没办法识别我所需的所有依赖文件,这时需要手动选择TEToolBox.exe依赖的所有文件,如图所示,点击 + 进行选择
如果选择的目录中包含了已经加载的文件,比如 images 中包含了 login.png,则 login.png 将不会在依赖列表中显示了,如下图所示
然后是选择提供给用户的一些文件,这些文件在用户的安装目录中可以找到,主要是放一些使用说明以及示例文件,注意不要放敏感信息,这里我将 examples 加入其中供用户参考,其余文件是Matlab自带的似乎无法删除。
最后就是选择在应用程序执行时是否显示命令行窗口,以及是否产生日志文件
这些全部设置完毕,就可以点击 Package 执行打包了,如果你按照我前面的操作提前下载了MCR,则打包的第一步即加载MCR很快就会执行完毕,否则会等待较长时间,其余三步只需要很短的时间
打包完成后会在你的主App所在目录下生成一个与主App同名的目录,里面包含了三个目录和一个html文件
for_redistribution : 里面为发布版本的安装程序(TEToolBoxInstaller_mcr.exe),你只需要把他发给用户进行安装就可以了
for_redistribution_files_only : 测试版本,内容如下
for_testing : 测试版本,内容如下
PackagingLog.html : 即打包的日志文件,记录了整个打包的流程
在发给用户使用前我们需要先进行测试,我们可以打开 for_redistribution_files_only 中的 TEToolBox.exe 进行测试,然后你会发现报错了,提示找不到MCR
这是因为我们没有安装MCR,之前只是下载了MCR,在执行打包时Matlab会将其打包进应用程序中,然后用户运行 TEToolBoxInstaller_mcr.exe 之后才会进行安装。
2.TEToolBox安装与卸载
注意安装时一定要选择空白目录,否则卸载时会将安装目录下的所有文件一并删除!
前面提到,用户运行 TEToolBoxInstaller_mcr.exe 之后才会安装MCR,既然如此,我们直接执行 TEToolBoxInstaller_mcr.exe 进行测试就可以了,没有问题之后就可以发给用户了,建议新建一个空白目录进行安装,比如我这里直接新建一个 test 目录用于安装,安装流程和日常我们所使用的软件安装流程基本一致。
1.软件的基本介绍
2.选择应用程序安装的目录,建议勾选添加桌面快捷方式
3.选择MCR的安装路径,默认即可
4.许可协议,无需多言
5.最后可以看到安装的具体目录,整个程序大小为2.93GB
6.将MCR添加到环境变量中,可以是系统环境变量也可以是用户环境变量,前者对所用用户都有效,环境变量的配置至关重要,如果MCR路径找不到就相当于没有安装,运行程序时就会报找不到MCR的错误警告,如何添加环境变量请自行百度或谷歌
安装完成,在运行之前我们先看一下安装目录里有什么?如下图所示:
application : 保存了exe文件以及开发者提供给用户的一些文件
R2024a : 即MCR相关的文件
uninstall :用于程序的卸载,卸载程序所在的路径如图所示,运行卸载程序会连同test目录一起卸载(删除)掉
3.常见的错误
这里介绍一下我在运行TEToolBox.exe时,遇到的一些问题,我窃以为这是高频错误
1.找不到运行时库
可能得原因有三个,一是没有安装MCR,二是安装了但是没有加入到环境变量中,三是MCR不匹配
2.不支持修改搜索路径
修改搜索路径的全部函数可以在 Matlab帮助文档 中找到
这是因为Matlab Compiler不支持修改搜索路径,所以你需要删除代码中的所有有关修改搜索路径的函数,使用比较多的可能是 addpath
、genpath
,删除之后也要相应的修改路径,根据打包时添加的依赖文件使用相对路径的方式,不过不要使用 . 或 … 来表示层级关系,比如我的error图标路径可以表示为 images/icons/error.png,如果用 ./images/icons/error.png 就会找不到该图标。
评论区