# Universal Android Debloater Next Generation Troubleshooting: Common Issues and Solutions

> Troubleshoot Universal Android Debloater Next Generation with solutions for ADB issues, Knox blocks, and self-update errors. Learn how to enable debug logging for faster resolution.

- Repository: [Universal-Debloater-Alliance/universal-android-debloater-next-generation](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation)
- Tags: troubleshooting-guide
- Published: 2026-06-18

---

**Universal Android Debloater Next Generation (UAD-NG) troubleshooting typically involves resolving ADB connectivity failures, permission restrictions like Samsung Knox blocks, cross-user package restoration issues, and self-update errors by examining the Rust core crate's error handling paths and enabling verbose logging with `RUST_LOG=debug`.**

Universal Android Debloater Next Generation is architected as three Rust crates—`uad-core`, `uad-gui`, and `uad-cli`—that communicate with Android devices via ADB to remove pre-installed bloatware. Most operational failures originate in the core crate's synchronization logic, where raw ADB errors are captured and translated into user-friendly messages before surfacing in the GUI or CLI.

## Device Detection and ADB Connectivity Issues

The most common entry point failure occurs when `uad-core::sync::get_device_model` cannot execute ADB commands, as implemented in lines 20-33 of [`crates/uad-core/src/sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/sync.rs). When this happens, the CLI prints *"no devices/emulators found"* while the GUI displays an infinite loading spinner.

**Root cause:** The ADB binary is not in PATH, USB debugging is disabled, or the device lacks authorization.

**Troubleshooting steps:**

1. Verify ADB is installed and accessible: `adb version`
2. Enable **USB debugging** on the Android device and authorize the PC when prompted
3. Restart the ADB server: `adb kill-server && adb start-server`
4. Run UAD-NG with debug logging to see exact ADB output:

```bash
RUST_LOG=debug uad devices

```

## Permission-Related Failures and Samsung Knox Restrictions

UAD-NG translates raw ADB error strings into actionable messages via `make_friendly_error_message` in [`crates/uad-core/src/sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/sync.rs) (lines 90-138). The GUI surfaces these in an error modal defined in `error_view` within [`crates/uad-gui/src/views/list.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-gui/src/views/list.rs).

**Common error patterns and fixes:**

- **DELETE_FAILED_USER_RESTRICTED**: Samsung Knox or OEM restrictions block uninstallation. Use `disable` instead of `uninstall`, or disable the Knox security profile in device settings.
- **NOT_INSTALLED_FOR_USER**: The package is missing for the selected Android user. Specify the correct user with `--user <id>` in the CLI or select the appropriate profile in the GUI.
- **Shell cannot change component state for null**: Indicates a stale package list. Refresh the package list using `uad update` or the GUI's *Refresh* button.
- **Permission denied** or **INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE**: Requires root privileges or indicates a protected package. Run on a **rooted device** or use **dry-run** mode to verify before proceeding.
- **DELETE_FAILED_DEVICE_POLICY_MANAGER**: The package is managed by corporate MDM/EMM. Contact IT admin or switch to a personal profile.

## Cross-User Package Restoration Issues

When a package reappears on secondary users after removal from the primary user, `detect_cross_user_behavior` (lines 90-191 of [`crates/uad-core/src/sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/sync.rs)) generates a notification like: *"Detected cross-user restoration: package exists on user 10 (Enabled) after uninstalling from user 0"*.

**Diagnostic workflow:**

1. List all users: `uad devices` or `adb shell pm list users`
2. Identify affected packages on specific users: `uad list --state enabled --user 10`
3. Apply actions to all users simultaneously: `uad uninstall com.example.app --user all`

## Self-Update Failures

The update subsystem in [`crates/uad-core/src/update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/update.rs) downloads releases from GitHub. Failures at lines 55-70 (`download_file`) propagate as `SelfUpdateStatus::Failed`, causing the GUI to display *"Failed to check update!"* or the CLI to print *"✗ Failed to update lists from remote, using cached version"*.

**Resolution steps:**

1. Verify internet connectivity and GitHub API access: `curl https://api.github.com`
2. Check for **rate limiting** (HTTP 403); if hit, wait one hour or use a different network
3. If automatic updates fail, perform a manual build:

```bash
git clone https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation.git
cd universal-android-debloater-next-generation
cargo build --release -p uad-cli

```

Replace the existing binary with `target/release/uad`.

## Backup and Configuration Errors

The GUI's settings view ([`crates/uad-gui/src/views/settings.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-gui/src/views/settings.rs)) handles export operations. Errors like *"Backup creation failed"* (line 219) occur when the output directory lacks write permissions.

**Fixes:**

- Ensure the backup directory is writable (default is the current working directory)
- On Windows, verify the path contains no prohibited characters
- Change the backup location via the *Backup folder* setting or run with elevated privileges

**Configuration parsing errors** in [`crates/uad-core/src/config.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/config.rs) manifest as *"Failed to read config file"*. Validate the TOML syntax in `~/.config/uad/config.toml` using a linter, or delete the file to regenerate defaults.

## Code Examples for Common Recovery Scenarios

### Verify ADB connectivity with verbose logging

```bash
RUST_LOG=debug uad devices

```

### Handle Samsung Knox restrictions using dry-run

```bash

# Test first

uad uninstall com.samsung.scloud --dry-run

# If restricted, disable instead

uad disable com.samsung.scloud

```

### Target specific Android users

```bash

# List packages for work profile (user 10)

uad list --user 10

# Remove from specific user only

uad uninstall com.example.app --user 10

```

### Resolve cross-user restoration

```bash

# Apply to all users to prevent restoration

uad uninstall com.example.app --user all

```

### Force self-update with debugging

```bash
RUST_LOG=debug uad self-update

```

### Export package selection

```bash
uad export --output ~/backups/uad_backup.json

```

## Summary

- **ADB connectivity** issues trace to `get_device_model` in [`sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/sync.rs) and require PATH verification and USB debugging enablement
- **Permission errors** are decoded by `make_friendly_error_message` and often require switching from uninstall to disable on restricted devices like Samsung Knox
- **Cross-user behavior** detection in [`sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/sync.rs) reveals when packages restore across Android profiles; use `--user all` to synchronize removals
- **Self-update failures** in [`update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/update.rs) typically indicate network or GitHub API rate limiting; manual compilation from source is the reliable fallback
- **Configuration and backup** errors stem from file permissions or invalid TOML syntax in the config directory

## Frequently Asked Questions

### Why does UAD-NG show "no devices found" when ADB works fine in my terminal?

UAD-NG launches its own ADB process and requires the `adb` binary to be in your system PATH, not just your user shell profile. Verify with `adb version` in a fresh terminal window, then restart the UAD-NG GUI or CLI. If the issue persists, restart the ADB server with `adb kill-server && adb start-server` to clear stale daemon connections.

### Can I debloat Samsung devices without triggering Knox security warnings?

Samsung Knox triggers `DELETE_FAILED_USER_RESTRICTED` errors in [`sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/sync.rs) when attempting to uninstall protected packages. According to the source code analysis, you should use the **disable** command instead of uninstall for Knox-protected apps, or temporarily disable the Knox security profile in your device settings before running UAD-NG operations.

### What causes the "cross-user restoration" notification and how do I fix it?

Android maintains package states per user profile (work profiles, secondary users). When you uninstall an app from user 0 but it remains enabled on user 10, `detect_cross_user_behavior` in [`sync.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/sync.rs) detects this mismatch. Use the `--user all` flag in the CLI or enable *Apply to all users* in the GUI to ensure the package is removed or disabled across every profile simultaneously.

### How do I troubleshoot "Failed to check update" errors in the GUI?

This error originates in [`crates/uad-core/src/update.rs`](https://github.com/Universal-Debloater-Alliance/universal-android-debloater-next-generation/blob/main/crates/uad-core/src/update.rs) when the GitHub API request fails or returns a rate-limiting 403 response. Check your internet connection and verify you can reach `https://api.github.com`. If you encounter rate limiting, wait one hour before retrying, or manually build the latest version from source using `cargo build --release -p uad-cli`.