Electron 安装包 asar 解压定位问题实战

背景

在开发 Electron 过程中,我们想知道 Electron 打包的最终形态是什么样的,以便我们能更好的理解 Electron 打包的过程,以及逆向来快速追踪一些问题,例如下面这个报错,以前这类报错都是靠猜,现在则可以快速定位,找到源码问题发生点

asar

分析 Electeron 的安装包发现,其他文件大小都不变,变的就是 asar 文件,经过 AI 询问,了解到 asar 是 npm 打出来的一个压缩包,是可以借助 asar 进行解压缩的,使用这个命令进行全局安装

npm install -g asar

解压缩过程

使用 webstorm,建立一个文件夹,然后 npm init下,会生成一个 package.json,然后把安装目录中 resources 下的 asar 压缩包拷贝到 webstorm 创建的文件夹下去

点击执行图标,就将 adsbrowser 代码解压缩到 adsbrowser.unpacked 目录下了

命令行讲解

npx asar extract app.asar adxbrowser.unpacked

# app.asar 就是压缩包的名字
# adxbrowser.unpacked 就是你要解压缩的路径
# 解压过程中会有个app.asar.unpacked 临时文件,adxbrowser不知道出自何原因,将其中的一部分
# 内容从asar 中分离出来,单独放在app.asar.unpacked中,然后再打包app.asar
# 可能是为了减少压缩包app.asar的体积还是为了防止逆向 至于怎么做到这种方式我目前还没搞明
# 白,解决这种方式的方法就是将对方安装路径下的app.asar.unpacked文件夹也放在app.asar包同
# 级下执行asar命令即可

快速定位

回到刚才的 main.js 问题,在解压的文件中找到 main.js,在 webstorm 中使用 ctrl+G,输入1:78049这可以快速找到发生问题的代码行列,这非常有利于自己修复

Electron 应用的安装包美化主要包括界面设计、图标更换、启动画面定制等环节。通过这些定制化操作,可以提升应用的专业性和用户体验。以下是具体实现方法: ### 图标更换 图标是应用程序的第一印象,更换默认图标可以显著提升应用的专业感。在 Electron 中,可以通过 `build` 配置项指定图标文件。图标文件通常包括 `.ico`(Windows)、`.icns`(macOS)和 `.png`(通用)格式。 在 `package.json` 中配置如下: ```json { "build": { "icon": "build/icon.ico" } } ``` 如果使用 `electron-builder` 打包,确保图标文件位于指定路径,并且格式正确。此外,对于不同平台,可能需要分别提供对应的图标文件以确保兼容性[^4]。 ### 启动画面定制 启动画面是应用启动时的过渡界面,用于提升用户体验。可以通过 `electron-splash-screen` 模块实现启动画面的定制。 安装模块: ```bash npm install electron-splash-screen --save ``` 在主进程中引入并配置: ```javascript const splashScreen = require('electron-splash-screen'); // 创建窗口前调用 splashScreen.create({ width: 400, height: 300, image: 'path/to/splash.png', backgroundColor: '#fff' }); ``` ### 界面美化 界面美化主要通过 CSS 和 HTML 实现。由于 Electron 应用本质上是基于 Web 技术构建的,因此可以使用现代前端框架(如 Vue、React)和 CSS 框架(如 Bootstrap、Tailwind CSS)来设计美观的用户界面。 例如,使用 Tailwind CSS 进行样式设计: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet"> <title>Electron App</title> </head> <body class="bg-gray-100 text-gray-800"> <div class="container mx-auto p-4"> <h1 class="text-2xl font-bold">Welcome to Electron App</h1> </div> </body> </html> ``` ### 安装包美化 安装包的美化通常涉及安装向导的设计。NSIS(Nullsoft Scriptable Install System)是一个强大的脚本驱动安装包制作工具,可以通过编写脚本来自定义安装过程。 安装 NSIS 插件: ```bash npm install electron-builder nsis --save-dev ``` 在 `package.json` 中配置 NSIS: ```json { "build": { "win": { "target": "nsis" }, "nsis": { "installerHeaderIcon": "build/icon.ico", "license": "LICENSE", "oneClick": false, "allowToChangeInstallationDirectory": true } } } ``` 编写 NSIS 脚本(`build/installer.nsh`)以自定义安装界面: ```nsis !include "MUI2.nsh" Name "Electron App" OutFile "electron-app-installer.exe" InstallDir "$PROGRAMFILES\MyApp" !define MUI_ICON "build/icon.ico" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "build/header.bmp" !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "LICENSE" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_LANGUAGE "English" Section SetOutPath "$INSTDIR" File /r "dist/**" CreateShortcut "$DESKTOP\MyApp.lnk" "$INSTDIR\electron-app.exe" SectionEnd ``` ### 主题定制 主题定制可以通过加载不同的 CSS 文件来实现。可以在应用启动时根据用户偏好加载不同的主题。 在主进程中: ```javascript const { app, BrowserWindow } = require('electron'); const path = require('path'); let mainWindow; function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: true } }); mainWindow.loadFile('index.html'); // 加载主题 const theme = 'dark'; // 或 'light' mainWindow.webContents.on('did-finish-load', () => { mainWindow.webContents.executeJavaScript(` document.body.classList.add('${theme}-theme'); `); }); mainWindow.on('closed', function () { mainWindow = null; }); } app.on('ready', createWindow); app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit(); }); app.on('activate', function () { if (mainWindow === null) createWindow(); }); ``` 在 HTML 文件中定义主题样式: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <style> body.light-theme { background-color: #ffffff; color: #000000; } body.dark-theme { background-color: #1a1a1a; color: #ffffff; } </style> <title>Electron App</title> </head> <body> <h1>Welcome to Electron App</h1> </body> </html> ``` 通过以上方法,可以有效地美化 Electron 应用的安装包,提升用户体验和应用的专业性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值