Skip to content

Feature request: Add parallel worker support for large APK processing #230

Description

@naijun0403

Problem

APKEditor/ARSCLib appears to process many large APK workloads mostly sequentially.

On modern multi-core systems, heavy operations such as resource decoding/encoding, DEX handling, smali disassembly/assembly, and large file scanning/writing do not seem to utilize available CPU cores effectively. This can make processing large applications significantly slower than necessary.

Affected operations

This is noticeable during operations such as:

  • merge
  • decompile
  • compile / rebuild
  • resource decode / encode
  • DEX and smali processing
  • large directory scans
  • archive entry extraction / writing

Example workload

Environment:

  • APKEditor: 1.4.9
  • Input: large APKM with many split APKs, resources, and classes*.dex files
  • JVM example:
java -Xmx8g -jar APKEditor.jar d -i app.apk -o out
java -Xmx8g -jar APKEditor.jar b -i out -o rebuilt.apk

During these operations, CPU usage remains mostly limited instead of scaling across available CPU cores.

Expected behavior

Independent workloads should be processed in parallel where possible, for example:

  • multiple resource files
  • multiple DEX files
  • multiple smali directories or files
  • independent archive entries
  • independent filesystem scan/write tasks

A CLI option to control the worker count would be useful, for example:

-jobs <count>

Example usage:

java -Xmx8g -jar APKEditor.jar d -i app.apk -o out -jobs 8
java -Xmx8g -jar APKEditor.jar b -i out -o rebuilt.apk -jobs 8

Using -jobs 1 could preserve the current single-threaded behavior for compatibility, debugging, or deterministic testing.

Suggested behavior

  • Default behavior could remain unchanged, or use a conservative default such as available processors.
  • -jobs 1 should force single-threaded processing.
  • Parallelization should be applied only to independent tasks where output order and correctness are not affected.
  • Archive output ordering could remain deterministic even if processing is done in parallel.

Impact

Large APK processing is much slower than it could be on multi-core systems. This is especially noticeable for apps with many resource files, split APKs, and multiple DEX files.

Adding controlled parallel processing would improve performance for large workloads while still allowing users to preserve single-threaded behavior when needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions