当前位置: 首页 > 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 仍然是一个非常有用的工具。

相关文章:

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

最近想用 electron 写一个 adb 的可视化客户端,在展示安装的应用时遇到了如何获取 APK 的名称和 icon 的问题。下面就是一些解决问题的思路。 前提:在这里默认大家已经下载好 apk, 下面 localApkPath 就是你下载好的 apk 的路径。 小提示,示…...

基于VirtualBox和Ubuntu的虚拟环境搭建

VirtualBox简介 VirtualBox 是一款开源虚拟机软件。 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。简单易用,可虚拟的系统包括Windows&…...

【PHP源码】匿名来信系统H5版本V1.0免费开源

你的匿名来信H5一封你的来信源码/表白祝福短信程序/往来信/传话短信源码支持邮件发信与手机短信发信“你的匿名来信”是最近某音上爆火的一个活动话题,可以通过H5网站,编辑自己想要对某人说的话或者祝福,网站会把您想说的发给您预留的号码&am…...

Prompt技巧总结和示例分享

"Prompt"(提示)在人工智能中通常指的是输入给模型的文本,用于引导模型生成预期的输出。在使用人工智能助手时,有效的提示技巧可以帮助你获得更准确和有用的回答。 以下是一些单轮对话提示时的技巧: 明确具体…...

大厂校招:海能达嵌入式面试题及参考答案

SPI 协议的一些基础知识 SPI(Serial Peripheral Interface)即串行外设接口,是一种高速的、全双工、同步的通信总线。 SPI 主要由四根信号线组成: 时钟线(SCLK):由主设备产生,用于同步数据传输。时钟的频率决定了数据传输的速度。主设备输出 / 从设备输入线(MOSI):主…...

wrk(1) command

文章目录 1.简介2.特点3.格式4.选项5.示例参考文献 1.简介 wrk 是一个现代的 HTTP 压力测试工具,利用现代多线程技术和高效的网络 I/O 处理,能够生成大量的并发请求,用以测试 HTTP 服务器的性能。 它是作为一种更现代的压力测试工具而设计的…...

【小程序 - 大智慧】Expareser 组件渲染框架

目录 问题思考课程目标Web Component类型说明定义组件属性添加 Shadow DOMTemplate and SlotExparser 框架原理自定义组件内置组件 下周计划 问题思考 首先,给大家抛出去几个问题: 前端框架 Vue React 都有自己的组件库,但是并不兼容&#…...

vue + echarts 快速入门

vue echarts 快速入门 本案例即有nodejs和vue的基础,又在vue的基础上整合了echarts Nodejs基础 1、Node简介 1.1、为什么学习Nodejs(了解) 轻量级、高性能、可伸缩web服务器前后端JavaScript同构开发简洁高效的前端工程化 1.2、Nodejs能做什么(了解) Node 打破了…...

服务器几核几G几M是什么意思?如何选择?

服务器几核几G几M是什么意思?我们建站、搭建网络平台都要用到云服务器,不管在腾讯云、阿里云还是别的云服务平台选购,都会接触到服务器配置。云服务器就是把物理服务器(俗称“母鸡”),用虚拟机技术虚拟出多…...

K8S服务发布

一 、服务发布方式对比 二者主要区别在于: 1、部署复杂性:传统的服务发布方式通常涉及手动配置 和管理服务器、网络设置、负载均衡等,过程相对复 杂且容易出错。相比之下,Kubernetes服务发布方式 通过使用容器编排和自动化部署工…...

Allen Institute for Artificial Intelligence (Ai2) 发布开源多模态语言模型 Molmo

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

Html CSS 布局,位置处理 居中 对齐

Html CSS 布局&#xff0c;位置处理 1、居中布局 1、div 让内部div居中对齐 html <div class"container"><div class"item">I am centered!</div> </div>style .container {border: 2px solid rgb(75, 70, 74);border-radius:…...

Spring MVC系统学习(二)——Spring MVC的核心类和注解

Spring MVC&#xff08;Model-View-Controller&#xff09;是Spring框架的一个模块&#xff0c;用于构建基于Web的应用程序。它使用模型、视图和控制器分离的设计模式&#xff0c;使得Web开发更加模块化和灵活。在学习Spring MVC时&#xff0c;有几个核心类和注解是非常关键的&…...

conda虚拟环境安装包、依赖同一管理

在 Python 的虚拟环境中&#xff0c;每个环境都是独立的&#xff0c;这意味着即使两个环境需要相同的库&#xff0c;它们也会分别安装各自的副本。这样做是为了避免不同项目之间相互影响&#xff0c;确保每个项目都有一个干净且隔离的环境。 方法一&#xff1a;使用 Conda 的共…...

Unity网络开发记录(四):在unity中进一步封装客户端类

在上一篇文章中&#xff0c;简单的封装了一下服务端中相关的socket对象&#xff0c;为了可以更方便的使用。所以在本篇中&#xff0c;进一步封装一下在unity中的相关客户端类 封装客户端类&#xff0c;首先采用单例模式&#xff0c;然后采用两个队列来存储我们相关的收发信息 p…...

Linux内核中的UART驱动-详解Linux内核UART驱动:结构与功能分析

一、UART概述 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;即通用异步收发器&#xff0c;是一种串行通信接口&#xff0c;用于在计算机和外部设备之间传输数据。它特别适用于短距离、低速、串行和全双工的数据传输。在Linux内核中&a…...

威胁检测与防范:如何及时、准确对抗安全风险

随着技术的飞速发展&#xff0c;网络空间中的威胁日益多样化、隐蔽化&#xff0c;给个人、企业乃至国家的信息安全带来诸多挑战。面对严峻的网络威胁&#xff0c;传统的防火墙、入侵检测系统&#xff08;IDS&#xff09;等防御手段虽能在一定程度上抵御外部攻击&#xff0c;但依…...

数据结构串的kmp相关(求next和nextval)

傻瓜版&#xff0c;用来演示手算过程&#xff0c;个人理解用的&#xff0c;仅供参考。...

创建游戏暂停菜单

创建用户控件 设置样式 , 加一层 背景模糊 提升UI菜单界面质感 , 按钮用 灰色调 编写菜单逻辑 转到第三人称蓝图 推荐用 Set Input Mode Game And UI , 只用仅UI的话 增强输入响应不了 让游戏暂停的话也可以用 Set Game Paused , 打勾就是暂停 , 不打勾就是继续游戏 , 然后…...

seata服务端部署

1.下载seata 官网下载地址&#xff1a;http://seata.io/zh-cn/blog/download.html 或者下载 作者已经下载的压缩包1.4.0 注意&#xff01;&#xff01;&#xff01; 要参考对应的版本&#xff0c;否则可能出现无法正常启动的情况。 参考文档 下载完毕后解压压缩文件 2.修改配…...

理解Python闭包概念

闭包并不只是一个python中的概念&#xff0c;在函数式编程语言中应用较为广泛。理解python中的闭包一方面是能够正确的使用闭包&#xff0c;另一方面可以好好体会和思考闭包的设计思想。 1.概念介绍 首先看一下维基上对闭包的解释&#xff1a; 在计算机科学中&#xff0c;闭包…...

51单片机的教室智能照明系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块DS1302时钟模块光照传感器红外传感器温度传感器LED等模块构成。适用于教室灯光全自动控制、教室节能灯控制、教室智能照明等相似项目。 可实现功能: 1、LCD1602实时显示时间、温度、光照强度等信息 2、光照强度传…...

一款资产进行快速存活验证工具

01工具介绍 &#xff08;下载地址见最后&#xff09; 在日常工作的渗透测试过程中&#xff0c;经常会碰到渗透测试项目&#xff0c;而Web渗透测试通常是渗透项目的重点或者切入口。通常拿到正规项目授权后&#xff0c;会给你一个IP资产列表和对应的Web资产地址&#xff0c;这时…...

I/O中断处理过程

中断优先级包括响应优先级和处理优先级&#xff0c;响应优先级由硬件线路或查询程序的查询顺序决定&#xff0c;不可动态改变。处理优先级可利用中断屏蔽技术动态调整&#xff0c;以实现多重中断。下面来看他们如何运用在中断处理过程中&#xff1a; 中断控制器位于CPU和外设之…...

关于PHP 匿名函数在处理数据结构中的应用

PHP 的匿名函数&#xff08;也称为闭包&#xff09;在处理数据结构时非常有用。它们可以在需要一次性函数的情况下使用&#xff0c;例如数组函数的回调、事件处理或作为其他函数的参数。以下是一些常见的应用场景&#xff1a; 数组操作&#xff1a; 使用 array_map、array_fil…...

安卓13默认使用大鼠标 与配置分析 andriod13默认使用大鼠标 与配置分析

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 android13里面的鼠标貌似比以前版本的鼠标小了,有些客户想要把这个鼠标改大。这个功能,android有现成的,就在这里,设置 =》无障碍 =》色彩和动画 =》 大号鼠标指针。 我们通过…...

AI学习指南深度学习篇-批标准化在深度学习中的应用

AI学习指南深度学习篇-批标准化在深度学习中的应用 引言 批标准化&#xff08;Batch Normalization, BN&#xff09;是一种在深度学习中常用的技术&#xff0c;旨在加速训练过程并提高模型的稳定性。它通过标准化每一个小批量的激活值&#xff0c;减小内部协变量偏移&#xf…...

了解网络的相关信息

文章目录 前言了解网络的相关信息1. ip是什么?1.1. 公网IP:1.2. 私有IP:1.2.1. 示例 2. 子网掩码3. 子网掩码的划分网段是什么4. 特殊的回路IP网段(127.0.0.1)5. 端口 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#x…...

Java | Leetcode Java题解之第447题回旋镖的数量

题目&#xff1a; 题解&#xff1a; class Solution {public int numberOfBoomerangs(int[][] points) {int ans 0;for (int[] p : points) {Map<Integer, Integer> cnt new HashMap<Integer, Integer>();for (int[] q : points) {int dis (p[0] - q[0]) * (p[…...

Docker实践与应用举例

引言 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。本文将详细介绍 Dock…...

wordpress的链接怎么设置/seo怎么才能做好

四、self-attention 1、是什么&#xff1f; attention机制通常用在encode与decode之间&#xff0c;但是self-attention则是输入序列与输出序列相同&#xff0c;寻找序列内部元素的关系即 KVQ。l例如《Attention Is All You Need》在编码器中使用self-attention&#xff0c;利用…...

程序员做兼职的网站/app拉新推广平台渠道

本文地址&#xff1a;https://www.cnblogs.com/maplefighting/p/8007456.html 没啥成绩&#xff0c;大二三拿过省赛银&#xff0c;然后大三大四总共打了两场ccpc和两场icpc&#xff0c;都是一轮游。(虽然已经超过往届师兄的记录&#xff0c;但是还是贼菜&#xff0c;主要没系统…...

网站开发流程博客/广告营销策划

引入模块的方式&#xff1a; 1. import 模块 2. from xxx import 模块 一、collections 模块 1.Counter() counter是一个计数器&#xff0c;主要用来计数&#xff0c;计算一个字符串中每个字符出现的次数 1 from collections import Counter 2 s "我要从南走到北&#xf…...

做网站需求报告/自动点击关键词软件

1. 函数的任意数目的参数你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数下面是一个示例向你展示了默认参数的函数&#xff1a;// 两个默认参数的函数function foo($arg1 , $arg2 ) { echo "arg1: $arg1\n&quo…...

b2b网站模版/广州网站优化页面

The temporary upload location *** is not valid&#xff1f; 问题描述 之前好好的&#xff0c;一段时间之后&#xff0c;在调用文件上传的接口 的时候出现以下错误 出错描述&#xff1a;在调用文件上传的接口的时候报错 The temporary upload location *** is not valid 出…...

东莞手机网站建设/想建立自己的网站

文章目录 一、前言二、源码二、版本三、开始1、游戏规则2、艺术风格3、摄像机设置4、光线设置5、地面设置6、建筑物设置7、城堡设置8、怪物设置9、生成怪物10、子弹设置11、防御塔设置12、内容拓展一、前言 在本教程中,我们将创建一个小的三维塔防御游戏与一个完全独特的图形…...