1、安装asar npm install -g asar 2、解压 asar extract 压缩文件 解压文件夹 3、压缩:如果压缩文件存在,则会被替换 asar pack 文件夹 压缩文件名
0x01 简介 大家好,今天和大家讨论的是 ASAR 完整性检查,ASAR 不是一种策略,而是一种文件格式 Electron 的 asar(Archive)是一种将多个文件和目录打包成一个单一文件的归档格式 例如,假设我们在 /path/to 文件夹下有个 example.asar 包: 1) 列出 asar 内部文件列表 asar list /path/to/example.asar $ asar list ASAR 完整性 ASAR完整性是一项实验性功能,可在运行时验证应用的ASAR归档的内容 目前支持 ASAR 完整性的版本如下 MacOS 上 Electron >= 16.0.0 Windows 请注意,这个包已经迁移到 @electron/asar 所有版本的 @electron/asar 都支持ASAR完整性 1. 采集ASAR头部的hash ASAR 完整性根据您在打包时提供的头部 hash 来验证 ASAR 存档的内容。
工具: npm install -g asar 或者 cnpm install -g asar C:\Program Files>asar -V v3.0.3 // 出现版本号说明安装成功 解压 app.asar 文件: asar extract app.asar . /asar/ 使用上面命令将 app.asar 解压到同级目录 asar 下,前提是 cd 到文件所在目录,并创建好 asar 文件。 ,使用以下命令压缩即可,其中 pack 是我前一步解压的目录: asar pack asar app.asar 注:建议在此前备份旧的 app.asar 文件,以免造成无法挽回的损失。 参考文献 Get full version of StarUML 如何解压 electron 的 app.asar PM 安装 asar,打包,解压,查看 asar 文件 ---------------
333.999.0.0 从 https://gitee.com/dmhsq/react-ts-vite-electron 的仓库代码开始搭建 两种更新方式 1.资源替换 (还可以更换成其它框架开发打包的asar 资源) 如下看效果 2.安装包 逻辑如下 应用启动时 调用 检查更新方法 检查更新方法 查询云数据库 获取版本信息 如果版本不一致 会提示是否更新 根据更新类型(exe安装包/asar资源包) 下载资源并存到本地 立即重启:替换 本地asar资源包 重启应用 稍后重启:关闭应用时 替换资源包 再次打开为新的 安装包模式 为下载安装包并弹出资源管理器标记安装包 资源替换效果如下 原本react-ts开发的我们替换成了 vue开发的 其实只是替换了asar资源包 可以用 纯electron+html 开发 不使用框架 重点是asar包 [请添加图片描述] 2.安装包的效果如下 下载完成会弹出资源管理器 为安装包所在目录 ", "text": "asar资源包" }], "description": "安装包类型,exe || asar", "label": "安装包类型" }, "version
输入以下指令安装asar npm install -g asar 打开安装目录,找到 app.asar app.asar文件是Electron加密打包时的中间产物,electron 调用resources 文件夹下的app.asar, 从而实现不用解压缩而高效直接读取文件内容. app.asar ... 切换到app.asar所在文件夹,然后输入 sudo asar extract app.asar app 进入 app 目录 /Applications/StarUML.app/Contents/Resources ,激活完毕 asar pack app app.asar ---- Kotlin开发者社区 ?
我遇到难题了,为此困惑了多日,解决不了,关于Electron在ASAR包中可以使用二进制文件的问题,这个问题解决起来非常的痛苦,但还是得去解决,找办法。 我能想到的第一个办法,官方文档都快被我翻烂了,Google搜来搜去,说是可以在package.json文件中配置asar:false来关闭ASAR,试了试还是没解决问题。 Not supporting .spawn() means a lot of apps are not able to use ASAR as they need the more flexible . ://github.com/electron/electron/issues/9459 https://github.com/electron/electron/issues/9459 大意就是说在ASAR path.replace('app.asar', 'app.asar.unpacked') : path; 又回来了,nw市场原来是这样推荐来的?
准备 首先需要获得asar的解包和打包工具,工具的使用依赖于以下环境: python环境 node环境(可选) 步骤 1.获取工具源代码,进入到工具的根目录。 3.找到Typora安装目录下的app.asar文件,例如:C:\Program Files\Typora\resources\app.asar。 4.执行工具解包命令: 1 python typora.py "C:\Program Files\Typora\resources\app.asar" workstation\outfile\ app.asar 成功之后在workstation\outappasar目录下能找到新的app.asar文件,将该文件替换至typora安装目录下的原始文件(替换之前最好先备份)。 F&Q 启动Typora报错 如果替换app.asar文件后,启动typora报出了如下错误: 解决办法,在打包app.asar前,先将typora安装目录下的resources\app.asar.unpacked
因此实际项目和空项目多的东西应该就是在 app.asar 上面了。 app.asar 在 dist/win-unpacked/resources/ 下生成了 app.asar 文件,这是一个用 asar 压缩后的文件。 我们可以解压看下里面是什么: # 安装 asarnpm install -g asar# 解压到 ./app 文件夹下asar extarct app.asar . electron.asar 我们再来看下 electron.asar 打包了什么东西: asar extract electron.asar . 不同的应用程序只需要重新打包好相应的 app.asar 即可。
窗体创建后加载页面使用的是loadURL函数,并且传入的参数形如: `file://${__dirname}/index.html` PS:在electron-vue中,编译打包后的__dirname是asar 遂临时启动DevTool窗口查看控制台输出,发现类似如下错误: Not allowed to load local resource: file://XXXXXX/app.asar/dir1/dir2/ index.html 原因及方案 1、文件并不存在于你的asar包中 处理方式: 全局安装npm install -g asar 通过asar解压app.asar包,检查上述提到的file路径中是否存在你的 production' }, 4、使用loadFile而不是loadURL 使用loadFile接口来加载本地的路径,loadFile(‘path/to/index.html’),这个路径是以app.asar 例如,loadFile(‘dir_path1/dir_path2/index.html’),那么你的index.html在app.asar是如下的结构: app.asar |-dir_path1 |
# 首先备份官方语言包 mv /usr/share/gitkraken/resources/app.asar.unpacked/strings.json /usr/share/gitkraken/resources /app.asar.unpacked/strings.json.bk # 从github拉取资源并替换 wget https://github.com/k-skye/gitkraken-chinese/ raw/master/strings_8.1.1.json -O /usr/share/gitkraken/resources/app.asar.unpacked/strings.json # 如果在国内访问 hub.fastgit.org/k-skye/gitkraken-chinese/raw/master/strings_8.1.1.json -O /usr/share/gitkraken/resources/app.asar.unpacked
1,完成asar功能。这个功能其实也简单,就是一个虚拟文件系统。 electron是注册了个c++对象,在node启动的时候,会hook掉原生node的fs对象(asar_init.js和asar.js里实现hook),把文件读取遍历这些,先走一遍js层的hook代码 ,此代码调用了c++,c++会读这个asar文件,此文件头部有个json串,记录了文件偏移。 所以之后node读的时候都是通过json和偏移来读文件 目前还有点小功能没完成,就是把miniblink里的读写文件也走asar系统
\\electron\\lib\读取资源,否则从\\resources\\electron.asar\\读取资源 这个资源就是那堆必要的js,如init.js,browser-window.js等。 /app.asar/虚拟目录是否存在,是则加载里面的package.json,否则从 \\resources\\electron.asar\\default_app\\package.json里加载。
下图是在网上可以搜索到的汉化包的使用流程,需要我们替换名为app.asar的文件。那好吧,我们就把这个文件解开来看看。 第一步: 将app.asar拷贝到一个新建的空白目录; 第二步: 我们需要使用到asar的一个Node包,我们这里就不用再进行安装了使用npx执行运行即可; 解包命令:npx asar extract /app.asar ./output 下图是我们解压后得到的目录: 关键字替换: 被选中做今天汉化的软件是这一款,因为单词不多,都是一些通用名称,所以作者并没有考虑要使用中文。 通过执行asar的命令来进行打包:npx asar pack ./output . /app1.asar,将打包后的内容按如何解包那一节的方法操作即可,下图就是我们汉化完的菜单: 总结: 此次番外篇我们只是简单的介绍了无源码汉化的大致流程和如何对Electron打包后的产品中的app.asar
本文中,通过 npm install -D asar 来下载 asar 模块及其依赖,文件结构如下: [image-20210926115136990] 离线安装全局 asar 方法一的原理就和我们在线安装 ] 表示已经成功安装了 asar 模块,大功告成! /usr/local/bin/asar 下找到 asar,查看其属性: [image-20210926133832366] 所以,千万不要删除或者重命名 test/node_modules/asar/ 文件路径,否则会导致全局 asar 失效! 在 windows 下,使用该方法后,整个 asar 文件夹被完整复制到了 AppData/Roaming/npm/node_modules 下,删除原 asar 文件夹不影响使用。
因此实际项目和空项目多的东西应该就是在 app.asar 上面了。 app.asar 在 dist/win-unpacked/resources/ 下生成了 app.asar 文件,这是一个用 asar 压缩后的文件。 我们可以解压看下里面是什么: # 安装 asar npm install -g asar # 解压到 ./app 文件夹下 asar extarct app.asar . electron.asar 我们再来看下 electron.asar 打包了什么东西: asar extract electron.asar . 不同的应用程序只需要重新打包好相应的 app.asar 即可。
下载完之后,以管理员身份打开 cmd: npm install -g asar cd "C:\Program Files\StarUML\resources" asar extract app.asar 最后把代码编译成软件就可以了: cd "C:\Program Files\StarUML\resources" asar pack app app.asar
一堆的 pak 文件 ├── resources │ ├── app.asar (空项目只有 2KB,一个实际项目有 130MB+) │ └── electron.asar (大小在 250KB 可以利用 asar 工具解压这个文件看下里面包含了什么。 elecrton.asar electron 的 JS 部分代码。如提供 remote、ipcMain、ipcRenderer 等模块。 一个事先就编译好的程序,功能就是运行 resoruces/app.asar 这个文件内所包含的项目代码。 app.asar 文件。 目前 app.asar 是将我们的项目整个打包,我们整个应用之所以大,原因在于 node_modules 文件夹特别大。
关闭 Docker Desktop; 在 Docker 安装目录(Windows下默认为C:\Program Files\Docker\Docker\frontend\resources)找到 app.asar 文件并将其备份,防止出现意外; 将从本仓库下载的 asar 文件改名为 app.asar 后替换原文件。
官网的FAQ: https://electronjs.org/docs/faq 二进制文件在asar包中无法访问: 构建时需要在package.json文件中写上"asar":false,原因是electron 打包时二进制文件在asar包中无法访问,如果上述设置无法解决,就只能硬编码,Mac规则如下:app.asar存在就直接引用,如果app.asar不存在,将路径替换成app.asar.unpacked,如果这个也不存在
1,今天在修改一个mini-electron的bug,就是mini-electron加载asar有时候提示文件UV_EBADF。 原因是asar的Archive::Archive函数,会调用_open_osfhandle获取fd,然后传到nodejs的 static void Read(const FunctionCallbackInfo 说到这里要讲解下electron的asar机制。 在apiasar.cpp里(原版electron应该也是类似的),initAsarSupport这个会注入一个asar_init.js文件,hook nodejs的fs模块。 当fs模块调用read 之类的函数,会走入asar_init.js里的hook函数。在这里面,会检测读写的路径是不是asar模块里的。如果是的话就走c++层读取真正的文件。