当前位置: 首页 > news >正文

在 NodeJs 里面如何获取 APK 的名称和 icon

最近想用 electron 写一个 adb 的可视化客户端,在展示安装的应用时遇到了如何获取 APK 的名称和 icon 的问题。下面就是一些解决问题的思路。

前提:在这里默认大家已经下载好 apk, 下面 localApkPath 就是你下载好的 apk 的路径。

小提示,示例代码不能直接执行,需要自行修改哦

获取 apk 的名称

我们要下载一个 aapt, 如果找不到下载地址,用这个, 然后我们就可以通过这个工具来获取到一些相关的信息了。其实不仅仅可以获取到 apk 的名称,具体的内容可以自己打印一下查看。下面是通过正则获取到中文 apk name。
aapt 是什么。

import { exec } from "child_process";
import { promisify } from "util";
import aapt from "../../resources/aapt.exe?asset&asarUnpack"; // 这里需要指定路径,我这里是 electron-vite 的用法,如果是其他方式,请自行修改const execAsync = promisify(exec);
const { stdout: aaptInfo } = await execAsync(`${aapt} dump badging ${localApkPath}`
);
const appNameMatch = aaptInfo.match(/application-label-zh_CN:'([^']*)'/);
const appName = appNameMatch ? appNameMatch[1] : "未知";

获取 apk 的 icon

我们要安装一个依赖,他是 adm-zip , 他是用来解压 apk 文件的。

npm i adm-zip

然后安装好之后,我们就可以使用他来解压 apk 文件了。第一步还是要用 aapt 获取到 icon 的路径。然后我们就可以使用 adm-zip 来获取到 icon 的 base64 了。其实挺简单的,就是网上没有现成的例子,所以记录一下。换到别的语言其实思路都是一样的。

import AdmZip from "adm-zip";
import { promisify } from "util";
import aapt from "../../resources/aapt.exe?asset&asarUnpack"; // 这里需要指定路径,我这里是 electron-vite 的用法,如果是其他方式,请自行修改const zip = new AdmZip(localApkPath);
const execAsync = promisify(exec);
const { stdout: aaptInfo } = await execAsync(`${aapt} dump badging ${localApkPath}`
);
const iconMatch = aaptInfo.match(/application-icon-[0-9]+:'([^']+)'/);
if (iconMatch) {const iconPath = iconMatch[1];const iconBuffer = zip.getEntry(iconPath).getData();const iconBase64 = iconBuffer.toString("base64");return iconBase64;
}

aapt 是什么

aapt (Android Asset Packaging Tool)是 Android 开发工具链中的一个重要工具,主要用于打包和处理 Android 应用程序中的资源文件。它是 Android SDK 中的一部分,在应用构建过程中起到关键作用。

主要功能包括:

  1. 打包资源文件:将项目中的资源(如 XML 文件、图片等)打包为 .apk 文件中的资源包。
  2. 生成 R.java 文件aapt 负责分析应用中的资源文件并生成 R.java 文件,供 Java 代码访问资源。
  3. 编译资源文件aapt 会将 .xml 等资源文件编译成二进制格式,减少文件大小并提高解析效率。
  4. 查看 APK 文件内容:可以使用 aapt 查看 APK 文件中的内容和资源。
  5. 签名 APK 文件:配合其他工具,aapt 可以协助进行 APK 的签名操作,确保应用安全。

通常, aapt 是 Android 构建过程中自动调用的,开发者不需要手动使用它,但在一些高级使用场景下(比如反编译、查看 APK 内容等), aapt 仍然是一个非常有用的工具。

http://www.lryc.cn/news/449748.html

相关文章:

  • 基于VirtualBox和Ubuntu的虚拟环境搭建
  • 【PHP源码】匿名来信系统H5版本V1.0免费开源
  • Prompt技巧总结和示例分享
  • 大厂校招:海能达嵌入式面试题及参考答案
  • wrk(1) command
  • 【小程序 - 大智慧】Expareser 组件渲染框架
  • vue + echarts 快速入门
  • 服务器几核几G几M是什么意思?如何选择?
  • K8S服务发布
  • Allen Institute for Artificial Intelligence (Ai2) 发布开源多模态语言模型 Molmo
  • Html CSS 布局,位置处理 居中 对齐
  • Spring MVC系统学习(二)——Spring MVC的核心类和注解
  • conda虚拟环境安装包、依赖同一管理
  • Unity网络开发记录(四):在unity中进一步封装客户端类
  • Linux内核中的UART驱动-详解Linux内核UART驱动:结构与功能分析
  • 威胁检测与防范:如何及时、准确对抗安全风险
  • 数据结构串的kmp相关(求next和nextval)
  • 创建游戏暂停菜单
  • seata服务端部署
  • 理解Python闭包概念
  • 51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】
  • 一款资产进行快速存活验证工具
  • I/O中断处理过程
  • 关于PHP 匿名函数在处理数据结构中的应用
  • 安卓13默认使用大鼠标 与配置分析 andriod13默认使用大鼠标 与配置分析
  • AI学习指南深度学习篇-批标准化在深度学习中的应用
  • 了解网络的相关信息
  • Java | Leetcode Java题解之第447题回旋镖的数量
  • Docker实践与应用举例
  • 828华为云征文 | 智能监控新篇章,Prometheus如何在华为云Flexusx容器环境中大展身手