# puruliaking007/apksignertool architecture

> Architecture diagram of the GitHub repository puruliaking007/apksignertool, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/puruliaking007/apksignertool
- Repository: https://github.com/puruliaking007/apksignertool

## Overview

ApkSignerTool is an Android utility for selecting an APK, choosing a signing key and scheme, and writing a signed APK to an output path. The documented user flow is represented through the UI, file picker, signer entry point, and APK signing library. The signing engine and scheme implementations are shown as internal layers; source excerpts do not expose the app-level signer’s full calls, so uncertain wiring is omitted. The README does not describe APK verification as a user-facing capability.

Main entry points: [`app/src/main/java/com/android/apksig/DefaultApkSignerEngine.java`](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/DefaultApkSignerEngine.java) (Signing engine), [`app/src/main/java/com/PuruliaCheatz/apksigner/utils/Signer.java`](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/utils/Signer.java) (App signer), [`app/src/main/java/com/PuruliaCheatz/apksigner/activities/MainActivity.java`](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/activities/MainActivity.java) (Signing screen), [`filepicker/src/main/java/com/github/angads25/filepicker/view/FilePickerDialog.java`](https://github.com/puruliaking007/apksignertool/blob/main/filepicker/src/main/java/com/github/angads25/filepicker/view/FilePickerDialog.java) (File picker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Android app"]
  node_main["Signing screen<br/>[MainActivity.java]"]
  node_picker["File picker"]
  node_signer["App signer<br/>[Signer.java]"]
end

subgraph group_signing["APK signing"]
  node_apksigner["APK signer API<br/>[ApkSigner.java]"]
  node_engine["Signing engine"]
  node_v1["V1 signing"]
  node_v2["V2 signing"]
  node_v3["V3 signing"]
  node_v4["V4 signing"]
end

subgraph group_format["APK formats"]
  node_zip["ZIP structure<br/>[ZipUtils.java]"]
  node_block["Signing block"]
  node_manifest["JAR manifest"]
end

node_user(("User"))
node_apk["APK input/output"]
node_keystore["Signing keys"]

node_user -->|"selects options"| node_main
node_main -->|"opens picker"| node_picker
node_picker -->|"returns selection"| node_main
node_main -->|"starts signing"| node_signer
node_apk -->|"provides APK"| node_signer
node_keystore -->|"provides key"| node_signer
node_signer -->|"signs APK"| node_apksigner
node_apksigner -->|"uses engine"| node_engine
node_engine -->|"dispatches scheme"| node_v1
node_engine -->|"dispatches scheme"| node_v2
node_engine -->|"dispatches scheme"| node_v3
node_engine -->|"dispatches scheme"| node_v4
node_engine -->|"processes ZIP"| node_zip
node_engine -->|"writes block"| node_block
node_engine -->|"writes signatures"| node_manifest
node_signer -->|"writes signed APK"| node_apk

click node_main "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/activities/MainActivity.java"
click node_picker "https://github.com/puruliaking007/apksignertool/blob/main/filepicker/src/main/java/com/github/angads25/filepicker/view/FilePickerDialog.java"
click node_signer "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/utils/Signer.java"
click node_apksigner "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/ApkSigner.java"
click node_engine "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/DefaultApkSignerEngine.java"
click node_v1 "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeSigner.java"
click node_v2 "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v2/V2SchemeSigner.java"
click node_v3 "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v3/V3SchemeSigner.java"
click node_v4 "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v4/V4SchemeSigner.java"
click node_zip "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/zip/ZipUtils.java"
click node_block "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/ApkSigningBlockUtils.java"
click node_manifest "https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/jar/ManifestWriter.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_picker,node_signer,node_user toneBlue
class node_apksigner,node_engine,node_v1,node_v2,node_v3,node_v4 toneAmber
class node_zip,node_block,node_manifest toneMint
class node_apk,node_keystore toneIndigo
```

## Components

### Android app

- [Signing screen](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/activities/MainActivity.java): `app/src/main/java/com/PuruliaCheatz/apksigner/activities/MainActivity.java`
- [File picker](https://github.com/puruliaking007/apksignertool/blob/main/filepicker/src/main/java/com/github/angads25/filepicker/view/FilePickerDialog.java): `filepicker/src/main/java/com/github/angads25/filepicker/view/FilePickerDialog.java`
- [App signer](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/PuruliaCheatz/apksigner/utils/Signer.java): `app/src/main/java/com/PuruliaCheatz/apksigner/utils/Signer.java`

### APK signing

- [APK signer API](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/ApkSigner.java): `app/src/main/java/com/android/apksig/ApkSigner.java`
- [Signing engine](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/DefaultApkSignerEngine.java): `app/src/main/java/com/android/apksig/DefaultApkSignerEngine.java`
- [V1 signing](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeSigner.java): `app/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeSigner.java`
- [V2 signing](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v2/V2SchemeSigner.java): `app/src/main/java/com/android/apksig/internal/apk/v2/V2SchemeSigner.java`
- [V3 signing](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v3/V3SchemeSigner.java): `app/src/main/java/com/android/apksig/internal/apk/v3/V3SchemeSigner.java`
- [V4 signing](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/v4/V4SchemeSigner.java): `app/src/main/java/com/android/apksig/internal/apk/v4/V4SchemeSigner.java`

### APK formats

- [ZIP structure](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/zip/ZipUtils.java): `app/src/main/java/com/android/apksig/internal/zip/ZipUtils.java`
- [Signing block](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/apk/ApkSigningBlockUtils.java): `app/src/main/java/com/android/apksig/internal/apk/ApkSigningBlockUtils.java`
- [JAR manifest](https://github.com/puruliaking007/apksignertool/blob/main/app/src/main/java/com/android/apksig/internal/jar/ManifestWriter.java): `app/src/main/java/com/android/apksig/internal/jar/ManifestWriter.java`

### Other components

- **User**
- **APK input/output**
- **Signing keys**

## Connections

- User → Signing screen: selects options
- Signing screen → File picker: opens picker
- File picker → Signing screen: returns selection
- Signing screen → App signer: starts signing
- APK input/output → App signer: provides APK
- Signing keys → App signer: provides key
- App signer → APK signer API: signs APK
- APK signer API → Signing engine: uses engine
- Signing engine → V1 signing: dispatches scheme
- Signing engine → V2 signing: dispatches scheme
- Signing engine → V3 signing: dispatches scheme
- Signing engine → V4 signing: dispatches scheme
- Signing engine → ZIP structure: processes ZIP
- Signing engine → Signing block: writes block
- Signing engine → JAR manifest: writes signatures
- App signer → APK input/output: writes signed APK
