# codinggay/blackdex architecture

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

- Interactive diagram: https://gitdiagram.com/codinggay/blackdex
- Repository: https://github.com/codinggay/blackdex

## Overview

BlackDex is an Android APK dex-dumping app backed by a virtualized Android runtime. Its main user journey is to choose an APK in the app, request a dump, and retrieve extracted DEX output; the README documents both installed and not-yet-installed APKs, plus optional deep instruction repair. The repository also contains package/user management, virtual process and activity services, Android API reflection, and native hooking/instrumentation. UI-to-dump-service wiring is not fully shown in the excerpts, so uncertain connections are omitted or marked unverified.

Main entry points: [`app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt`](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt) (Dump repository), [`Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java`](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java) (Package registry), [`Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java`](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java) (Virtual storage), [`app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt`](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt) (Dump screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App experience"]
  node_application["App startup<br/>[App.kt]"]
  node_app_manager["Runtime loader<br/>[AppManager.kt]"]
  node_main_ui["Dump screen<br/>[MainActivity.kt]"]
  node_view_model["Dump controls<br/>[MainViewModel.kt]"]
  node_settings["Dump settings<br/>[SettingFragment.kt]"]
end

subgraph group_dump["Dump runtime"]
  node_repository["Dump repository"]
  node_dump_record["Dump records<br/>[DumpInfo.kt]"]
  node_dump_service["Dump service"]
end

subgraph group_virtual["Virtual Android"]
  node_package_install["APK installation"]
  node_package_manager[("Package registry")]
  node_process_manager["Virtual processes"]
  node_activity_manager["Activity services"]
  node_user_manager[("Virtual users")]
  node_storage_manager["Virtual storage"]
  node_reflection["API reflection"]
end

subgraph group_native["Hooking layer"]
  node_dobby["Native hooks<br/>[dobby.h]"]
  node_dex_dump["DEX extraction<br/>[DexDump.cpp]"]
end

node_user(("Operator"))

node_user -.->|"selects APK"| node_main_ui
node_application -->|"starts loader"| node_app_manager
node_main_ui -.->|"requests dump"| node_view_model
node_view_model -.->|"delegates"| node_repository
node_repository -->|"records results"| node_dump_record
node_repository -.->|"requests dump"| node_dump_service
node_settings -.->|"configures runtime"| node_app_manager
node_dump_service -.->|"extracts DEX"| node_dex_dump
node_package_install -->|"installs packages"| node_package_manager
node_activity_manager -->|"starts processes"| node_process_manager
node_process_manager -->|"reads app info"| node_package_manager
node_user_manager -->|"deletes user packages"| node_package_manager
node_storage_manager -->|"accesses platform API"| node_reflection
node_storage_manager -->|"maps user storage"| node_user_manager
node_dex_dump -.->|"uses native hooks"| node_dobby

click node_application "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/app/App.kt"
click node_app_manager "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/app/AppManager.kt"
click node_main_ui "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt"
click node_view_model "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/main/MainViewModel.kt"
click node_settings "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/setting/SettingFragment.kt"
click node_repository "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt"
click node_dump_record "https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/data/entity/DumpInfo.kt"
click node_dump_service "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/dump/BDumpManagerService.java"
click node_package_install "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageInstallerService.java"
click node_package_manager "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java"
click node_process_manager "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/BProcessManager.java"
click node_activity_manager "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BActivityManagerService.java"
click node_user_manager "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserManagerService.java"
click node_storage_manager "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java"
click node_reflection "https://github.com/codinggay/blackdex/blob/main/Bcore/black-fake/src/main/java/reflection/MirrorReflection.java"
click node_dobby "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/cpp/Dobby/include/dobby.h"
click node_dex_dump "https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/cpp/DexDump.cpp"

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_application,node_app_manager,node_main_ui,node_view_model,node_settings toneBlue
class node_repository,node_dump_record,node_dump_service toneAmber
class node_package_install,node_package_manager,node_process_manager,node_activity_manager,node_user_manager,node_storage_manager,node_reflection toneMint
class node_dobby,node_dex_dump toneRose
class node_user toneIndigo
```

## Components

### App experience

- [App startup](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/app/App.kt): `app/src/main/java/top/niunaijun/blackdex/app/App.kt`
- [Runtime loader](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/app/AppManager.kt): `app/src/main/java/top/niunaijun/blackdex/app/AppManager.kt`
- [Dump screen](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt): `app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt`
- [Dump controls](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/main/MainViewModel.kt): `app/src/main/java/top/niunaijun/blackdex/view/main/MainViewModel.kt`
- [Dump settings](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/view/setting/SettingFragment.kt): `app/src/main/java/top/niunaijun/blackdex/view/setting/SettingFragment.kt`

### Dump runtime

- [Dump repository](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt): `app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt`
- [Dump records](https://github.com/codinggay/blackdex/blob/main/app/src/main/java/top/niunaijun/blackdex/data/entity/DumpInfo.kt): `app/src/main/java/top/niunaijun/blackdex/data/entity/DumpInfo.kt`
- [Dump service](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/dump/BDumpManagerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/dump/BDumpManagerService.java`

### Virtual Android

- [APK installation](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageInstallerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageInstallerService.java`
- [Package registry](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageManagerService.java`
- [Virtual processes](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/BProcessManager.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/BProcessManager.java`
- [Activity services](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BActivityManagerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BActivityManagerService.java`
- [Virtual users](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserManagerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserManagerService.java`
- [Virtual storage](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java): `Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java`
- [API reflection](https://github.com/codinggay/blackdex/blob/main/Bcore/black-fake/src/main/java/reflection/MirrorReflection.java): `Bcore/black-fake/src/main/java/reflection/MirrorReflection.java`

### Hooking layer

- [Native hooks](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/cpp/Dobby/include/dobby.h): `Bcore/src/main/cpp/Dobby/include/dobby.h`
- [DEX extraction](https://github.com/codinggay/blackdex/blob/main/Bcore/src/main/cpp/DexDump.cpp): `Bcore/src/main/cpp/DexDump.cpp`

### Other components

- **Operator**

## Connections

- Operator → Dump screen: selects APK
- App startup → Runtime loader: starts loader (evidence: `app/src/main/java/top/niunaijun/blackdex/app/App.kt`)
- Dump screen → Dump controls: requests dump (evidence: `app/src/main/java/top/niunaijun/blackdex/view/main/MainActivity.kt`)
- Dump controls → Dump repository: delegates
- Dump repository → Dump records: records results (evidence: `app/src/main/java/top/niunaijun/blackdex/data/DexDumpRepository.kt`)
- Dump repository → Dump service: requests dump
- Dump settings → Runtime loader: configures runtime (evidence: `app/src/main/java/top/niunaijun/blackdex/view/setting/SettingFragment.kt`)
- Dump service → DEX extraction: extracts DEX (evidence: `README.md`)
- APK installation → Package registry: installs packages (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/pm/BPackageInstallerService.java`)
- Activity services → Virtual processes: starts processes (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/am/BActivityManagerService.java`)
- Virtual processes → Package registry: reads app info (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/BProcessManager.java`)
- Virtual users → Package registry: deletes user packages (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/user/BUserManagerService.java`)
- Virtual storage → API reflection: accesses platform API (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java`)
- Virtual storage → Virtual users: maps user storage (evidence: `Bcore/src/main/java/top/niunaijun/blackbox/core/system/os/BStorageManagerService.java`)
- DEX extraction → Native hooks: uses native hooks
