# @devicefarmer/adbkit-apkreader 中文文档

规范地址：https://npmcn.com/package/%40devicefarmer/adbkit-apkreader/

版本：4\.0\.0
npm 元数据更新时间：2026-10-24T23:33:21.685Z
中文译文更新时间：2026-11-12T03:16:21.361Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40devicefarmer/adbkit-apkreader
原文对照：https://npmcn.com/package/%40devicefarmer/adbkit-apkreader/?lang=original
项目主页：https://github.com/DeviceFarmer/adbkit-apkreader#readme
源码仓库：https://github.com/DeviceFarmer/adbkit-apkreader

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：60.5 kB，14 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 22
- 运行依赖：2 个
- 首次发布：2020-05-16T12:39:05.202Z
- 最新版本发布：2026-10-24T23:33:21.260Z
- 近 30 天下载量：281264（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 1 个）

## 中文简介

从 APK 文件提取信息 .

## 安装

```sh
npm install @devicefarmer/adbkit-apkreader
```

也可以使用：`pnpm add @devicefarmer/adbkit-apkreader`、`yarn add @devicefarmer/adbkit-apkreader`、`bun add @devicefarmer/adbkit-apkreader`

## README

# adbkit 读取器

**adbkit 读取器** 页:1 [节点.js](http://nodejs.org/) API用于从Android APK文件中提取信息. 例如,它允许您阅读 `AndroidManifest.xml` 的 APK 文件.

## 所需资源

-   [节点.js](https://nodejs.org/) 22岁或更新。 旧版本不支持 .

## 开始

通过国家预防机制安装:

```bash
npm install --save @devicefarmer/adbkit-apkreader
```

### 实例

#### 读取 `AndroidManifest.xml` 自动启动程序

```javascript
const util = require('util')
const ApkReader = require('@devicefarmer/adbkit-apkreader')

ApkReader.open('HelloApp.apk')
  .then(reader => reader.readManifest())
  .then(manifest => console.log(util.inspect(manifest, { depth: null })))
```

#### 类型脚本

货包装有它自己的类型声明。 解析结果的形状导出于 `ApkReader` 名称空间 :

```typescript
import ApkReader from '@devicefarmer/adbkit-apkreader'

const reader = await ApkReader.open('HelloApp.apk')
const manifest: ApkReader.Manifest = await reader.readManifest()
// application has no lists when the manifest has no <application> element.
console.log(manifest.package, manifest.application.launcherActivities ?? [])
```

与 `esModuleInterop` 关闭, 使用 `import ApkReader = require('@devicefarmer/adbkit-apkreader')` 换句话说 其他出口类型包括: `ApkReader.XmlElement`, (中文(简体) ), `ApkReader.TypedValue` 财务报告和审定财务报表 `ApkReader.Attributes`。 。 。 .

## API 密码

返回的每一种方法a `Promise` 返回一个本地的。 3.x版本并提前返回 [青鸟](http://bluebirdjs.com/) 承诺;如果你只依靠蓝鸟的方法,例如 `.timeout()`, (中文(简体) ), `.tap()` 或者说 `.return()`,将结果包入 `Bluebird.resolve()` 或使用当地同等物.

### 自动读取器

#### ApkReader.manifest (英语)

带有值的便利常数 `'AndroidManifest.xml'`。在某些情况下,可以使用其他API方法.

#### ApkReader. open( 文件)

手动创建 ApkReader 实例的替代语法 。 文件和 `Buffer`s被支持,但在某个时候可能会添加对流的支持.

请注意,目前这种方法不能因为文件被懒散地打开而拒绝,但这可能会在未来发生改变,因此返回一个未来兼容性问题更少的保证. 在相关的节点上,直接拨打构造器仍然是可能的,但劝阻.

-   **文件** APK 文件的路径, 或一个 `Buffer` 及其内容.
-   回返:A `Promise` 解决一个 `ApkReader` 举个例子.

#### 阅读器。 read Content(路径)

读取APK内部给定文件的内容.

-   **路径** 文件的路径 。 例如,给予 `'META-INF/MANIFEST.MF'` 因为路径会读取该文件的内容.
-   回返:A `Promise` 解决一个 `Buffer` 包含文件的全部内容.

#### 读取器。 read Manifest( \[选项\])

阅读和描述 `AndroidManifest.xml` 在 APK 内保存文件,并返回其简化对象表示.

-   **选项** 可选的 一个 `Object` 具有下列属性:
    -   **调试** 若为 `true`,将二进制 XML 解析器的每个读取记录到控制台。 默认为 `false`。 。 。 .
-   回返:A `Promise` 用 Java 脚本解决 `Object` 代表清单。 见下文实例产出。 拒绝错误( 如解析失败 ) .

```javascript
{ versionCode: 1,
  versionName: '1.0',
  package: 'com.example.hello.helloapp.app',
  usesPermissions: [],
  permissions: [],
  permissionTrees: [],
  permissionGroups: [],
  instrumentation: null,
  usesSdk: { minSdkVersion: 7, targetSdkVersion: 19 },
  usesConfiguration: null,
  usesFeatures: [],
  supportsScreens: null,
  compatibleScreens: [],
  supportsGlTextures: [],
  application:
   { theme: 'resourceId:0x7f0b0000',
     label: 'resourceId:0x7f0a000e',
     icon: 'resourceId:0x7f020057',
     debuggable: true,
     allowBackup: true,
     activities:
      [ { label: 'resourceId:0x7f0a000e',
          name: 'com.example.hello.helloapp.app.MainActivity',
          intentFilters:
           [ { actions: [ { name: 'android.intent.action.MAIN' } ],
               categories: [ { name: 'android.intent.category.LAUNCHER' } ],
               data: [] } ],
          metaData: [] } ],
     activityAliases: [],
     launcherActivities:
      [ { label: 'resourceId:0x7f0a000e',
          name: 'com.example.hello.helloapp.app.MainActivity',
          intentFilters:
           [ { actions: [ { name: 'android.intent.action.MAIN' } ],
               categories: [ { name: 'android.intent.category.LAUNCHER' } ],
               data: [] } ],
          metaData: [] } ],
     services: [],
     receivers: [],
     providers: [],
     usesLibraries: [] } }
```

#### 读取器. readXml(路径\[,选项\])

在APK文件内部给定的路径读取并解析二进制 XML 文件. 尝试与 DOM API 在一定程度上兼容 .

-   **路径** APK内部的二进制 XML 文件路径. 例如,给予 `'AndroidManifest.xml'` 因为路径会解析显示( 但你可能想要使用) `reader.readManifest()` 页:1.
-   **选项** 可选的 与 `reader.readManifest()`。 。 。 .
-   回返:A `Promise` 用 Java 脚本解决 `Object` 表示 XML 文件的根节点 。 包括根节点在内的所有节点都有下面列出的属性. 拒绝错误( 如解析失败 ) .
    -   **名称空间URI** 命名空间 URI 或 `null` 如果没有.
    -   **节点类型** `1` 用于元素节点, `2` 用于属性节点,以及 `4` 用于CData部分.
    -   **节点Name** 节点名.
    -   对于元素节点,还存在以下属性:
        -   **属性** 一系列属性节点.
        -   **子节点** 一系列儿童节点.
    -   对于属性节点,存在以下属性:
        -   **名称** 属性名.
        -   **价值** 属性值,如果可能的话,以简单值表示.
        -   **键入值** 当属性代表复杂值时,可能可用. 见 [(原始内容存档于2018-09-21). Android. util. 已键入值](http://developer.android.com/reference/android/util/TypedValue.html) 更多信息。 具有下列属性:
            -   **价值** 价值,可能 `null`, (中文(简体) ), `String`, (中文(简体) ), `Boolean`, (中文(简体) ), `Number` 甚至是一个 `Object` 对于最复杂的类型.
            -   **类型** A 类 `String` 表示数值的类型.
            -   **原始类型** 数值类型的原始整数列报.
    -   对于 CData 节点,还存在以下属性:
        -   **数据** CData号.
        -   **键入值** 如果区域代表更复杂的类型,则可能可用。 详情见上文.

#### 读取器. using FileStream( 路径, 动作)

在 APK 内打开可读 Stream 到给定文件, 并用它运行给定动作 。 APK文件在动作运行时保持开放,允许您处理流. 一旦动作完成,APK就会自动关闭.

-   **路径** 文件的路径 。 例如,给予 `'META-INF/MANIFEST.MF'` 因为路径会打开文件.
-   **动作(流)** 以某种方式处理流的函数 . **必须** 返回 a `Promise` 当你处理完溪流后 就能解决了 价值 `Promise` 解决的还有: `usingFileStream()` 决意接受.
    -   **流线** 文件内容的可读流 。 你要么自己消耗 要么自己结束水流 然后再解决问题.
-   回返:A `Promise` 解决与任何 `action` 决意接受.

## 更多信息

-   [(原始内容存档于2018-09-21). Android. util. 已键入值](http://developer.android.com/reference/android/util/TypedValue.html) 关于数值类型的更多信息.
-   [董刘出色的基于Java的APK解析器](https://github.com/xiaxiaocao/apk-parser),用作参考执行.
-   [关于 Android 二进制 XML 格式的详细博客端口](http://justanapplication.wordpress.com/category/android/android-binary-xml/)
-   [关于这一专题的堆叠流讨论](http://stackoverflow.com/questions/2097813/how-to-parse-the-androidmanifest-xml-file-inside-an-apk-package)
-   [机器人工具](https://code.google.com/p/android-apktool/) 最先进的基于CLI/Java的APK工具.

## 释放

软件包以 npm 的形式发布 [`@devicefarmer/adbkit-apkreader`](https://www.npmjs.com/package/@devicefarmer/adbkit-apkreader) 由两个 GitHub 动作工作流程 :

1.  运行 `Prepare release` 以版本作为输入,例如 `3.2.5`它会撞倒 `package.json`,写下 `CHANGELOG.md` gitHub 生成的音符,并按 `release/v3.2.5`。它没有写给 `master`。 。 。 .
2.  打开任务摘要中的拉动请求链接, 贴上标签 `ignore-for-release`,一旦支票通过,就将其合并.
3.  运行 `Release` 打开 `master` 和同一个版本。 标记 `v3.2.5`,发布 GitHub 发布,并附上来自 `CHANGELOG.md`,然后将 TypeScript 编译,测试并用可信赖的出版方式(OIDC)将软件包发布到npm,所以没有npm 令牌存放在任何地方.

撞出一个拉出的要求 因为 `master` 被保护. `Release` 拒绝在任何分支上奔跑,但 `master`,所以没有出现 `release/v*` 分支无法发布.

## 捐款

见 [捐款额](https://npmcn.com/package/%40devicefarmer/adbkit-apkreader/CONTRIBUTING.md)。 。 。 .

## 许可证

见 [自由主义](https://npmcn.com/package/%40devicefarmer/adbkit-apkreader/LICENSE)。 。 。 .

版权:© OpenSTF 项目. 所有权利保留.

## 常见问题

### @devicefarmer/adbkit-apkreader 是什么？

从 APK 文件提取信息 \.

### 如何安装 @devicefarmer/adbkit-apkreader？

在项目目录运行 npm install @devicefarmer/adbkit-apkreader，或使用 pnpm add / yarn add / bun add。

### @devicefarmer/adbkit-apkreader 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @devicefarmer/adbkit-apkreader 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @devicefarmer/adbkit-apkreader 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @devicefarmer/adbkit-apkreader 可以商用吗？

@devicefarmer/adbkit-apkreader 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @devicefarmer/adbkit-apkreader 的下载量有多少？

根据 npm 官方下载统计，@devicefarmer/adbkit-apkreader 在 2026/10/12 – 2026/11/10 这 30 天内被下载 281,264 次，日均约 9,375 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @devicefarmer/adbkit-apkreader 还在维护吗？

最新版本 4\.0\.0 发布于 2026/10/25（18 天前）；至今共发布 6 个版本，其中过去 12 个月发布了 1 个；首次发布于 2020/05/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

