BugInfrastructure

In-Game Asset Download Frozen at 0.00% After Manual ZIP Modification on Android

The game's first-launch asset downloader is stalled — initially at ~45 MB remaining and now unable to progress past 0.00% — on an Android device with limited storage.

Rootlock SRE Engine 6 min read
Diagnostic brief

At a Glance

The game's first-launch asset downloader is stalled — initially at ~45 MB remaining and now unable to progress past 0.00% — on an Android device with limited storage.

Severity Medium
Confidence Medium
Frequency Unknown
Impact See analysis

Summary

The game's first-launch asset downloader is stalled — initially at ~45 MB remaining and now unable to progress past 0.00% — on an Android device with limited storage. The most likely cause is a combination of a corrupted or incomplete local asset state (introduced by manually deleting files from the distribution ZIP) and insufficient free storage to stage the incoming download. The practical impact is that the game is unplayable: the required runtime assets cannot be fetched or written to disk.

Root-Cause Analysis

Confirmed Evidence

  • The user manually deleted files from the game's distribution .zip before installation to conserve storage.
  • The game requires a ~45 MB supplemental asset download on first launch (a common pattern in mobile games that ship a thin launcher and pull content from a CDN at runtime).
  • After device restarts, the remaining download size decreased (45 MB → 40 MB → 35 MB), which confirms partial download data is being retained between sessions — meaning the downloader is making some progress but failing to resume cleanly.
  • The download is now stuck at exactly 0.00%, suggesting the downloader can no longer start a new request at all.

Reasonable Inference

  1. Broken local asset manifest. The files deleted from the ZIP likely included asset bundle entries, a manifest file (e.g., StreamingAssets/, obb content, or an internal catalog), or a checksum list. The game's runtime downloader cross-references local state against a remote manifest. With entries missing or checksums mismatched, the downloader may enter an unrecoverable error state rather than re-downloading cleanly.
  1. Insufficient free storage blocking write operations. Limited storage space combined with residual partial download cache may mean there is no room to stage new download chunks. Android's download manager will silently stall or report 0% when it cannot allocate write space.
  1. Corrupted partial download cache. The repeated download attempts and restarts have likely accumulated inconsistent partial files in the game's cache directory. The downloader may be attempting to resume from a corrupt offset, immediately failing, and reporting 0.00%.

Alternative Causes

  • The CDN endpoint hosting the assets may be rate-limiting repeated failed requests from the same device, though the VPN retry attempts suggest this is a secondary factor rather than the primary one.
  • A network timeout misconfiguration on the device (aggressive battery-saving modes blocking background network I/O) could contribute but would not explain the 0.00% stall on foreground download.

What Would Confirm the Diagnosis

  • Logcat output (adb logcat) filtered to the game's package name during a download attempt would show the exact exception (e.g., IOException: No space left on device, CRC mismatch, HTTP 416 Range Not Satisfiable, or a Unity AssetBundle load error).
  • The exact files deleted from the ZIP, compared against the game's asset manifest.

Resolution Steps

Work through these steps in order. Each step is safer and less destructive than the next.

Before anything else, verify that the device has at least 2× the remaining download size (so at minimum ~70–90 MB) of free internal storage. The downloader needs working space to stage, verify, and move chunks. Delete unused apps, clear other app caches, or move media to external storage until sufficient space is available.

  1. Free storage space first.

Go to Settings → Apps → [Game Name] → Storage → Clear Cache, then Clear Data. This wipes the corrupted partial download state and forces the downloader to restart cleanly from 0. Do not skip this step — simply reinstalling without clearing data often leaves stale cache in place.

  1. Clear the game's cache and data.

After clearing data, uninstall the game through the system app manager. Do not use the ZIP-modified version again.

  1. Uninstall the game completely.

Download the original, unmodified .zip or installer from the official source. Do not delete any files from it, regardless of their apparent size. Asset bundles, streaming assets, and manifest files that appear "unnecessary" are structurally required by the game engine's asset loading pipeline.

  1. Obtain an unmodified distribution package.

Follow the official installation instructions precisely. Place the complete, unmodified ZIP in the correct files/ directory as documented.

  1. Reinstall using the unmodified package.

Connect to a reliable Wi-Fi network. Disable battery-saving modes and ensure the game has permission to use background data and storage. Launch the game and allow the ~45 MB download to complete without interrupting it.

  1. Ensure a stable network connection before launching.
  1. If the download stalls again after a clean install, connect the device via USB with USB debugging enabled and capture logcat output during the download attempt to identify the exact failure (see CLI Commands below).

CLI Commands

Capture logcat output for the game during a download attempt (requires Android Debug Bridge):

# Replace <PACKAGE_NAME> with the game's actual package name (e.g., com.example.gridlesssekai)
adb logcat --pid=$(adb shell pidof -s <PACKAGE_NAME>) > game_download_log.txt

Check available internal storage on the device:

adb shell df -h /data

Clear app cache and data non-interactively (use only after uninstalling is not an option):

adb shell pm clear <PACKAGE_NAME>

> ⚠️ pm clear is equivalent to "Clear Data" — it resets the app to a fresh-install state and removes all local save data stored in internal app storage. Back up any save files first if they are stored externally (e.g., on an SD card or synced to a cloud service).

List files currently in the game's cache directory to inspect partial downloads:

adb shell ls -lh /sdcard/Android/data/<PACKAGE_NAME>/cache/
adb shell ls -lh /data/data/<PACKAGE_NAME>/cache/

Verification

After reinstalling with the unmodified package and sufficient free storage:

  1. Launch the game. The download progress bar should begin advancing immediately above 0.00% and continue without stalling.
  2. Monitor free storage during the download:
   watch -n 5 adb shell df -h /data

Free space should decrease steadily as chunks are written, without dropping to zero.

  1. The game should reach its main menu or title screen upon download completion without any error dialog.
  2. Logcat should show no IOException, CRC, checksum, or AssetBundle error lines from the game's package.

Rollback indicator: If the download stalls again at any percentage, immediately capture logcat output before killing the app — the first error line is the actionable one.

Prevention

  1. Never modify distribution archives. Asset bundles in Unity and similar engines are not independently removable — they are referenced by manifests with exact checksums. Removing any file breaks the entire dependency graph.
  1. Storage threshold before install. Ensure free storage ≥ (compressed package size + uncompressed asset download size + 20% headroom) before beginning installation. For this game, that is roughly the ZIP size + ~50–60 MB minimum.
  1. Use the game's built-in asset management. Many mobile games support in-game settings to select lower-quality asset packs. If the game offers such an option, use it rather than manually modifying package files.
  1. Preserve download atomicity. Do not interrupt first-launch asset downloads by force-closing the app, switching airplane mode on, or restarting the device. If interruption is unavoidable, clear cache before retrying.
  1. Enable USB debugging for future diagnostics. Having adb access eliminates guesswork — logcat will immediately identify whether failures are storage-, network-, or integrity-related.
Developer FirstBuilt for engineers solving real problems
Evidence DrivenTechnical claims tied to available evidence
Automation ReadyStructured for CLI, APIs, and workflows
Privacy FocusedNo unnecessary data collection in this article UI
STAY AHEAD OF ISSUES

Get new root-cause analyses in your inbox

Engineering-focused updates. No fake subscriber counts. Unsubscribe anytime.