Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADB Troubleshooting Reference for Wallet Testing

A comprehensive reference of adb commands used when testing digital wallets (EUDI Wallet, France Identité, etc.) with the ewQwe Credential Verifier.

Prerequisite: adb is typically located at ~/Library/Android/sdk/platform-tools/adb on macOS (when installed via Android Studio). Add it to your PATH for convenience.


Device & Connection Management

List Connected Devices

# List all connected devices/emulators
adb devices

# List only emulator devices
adb devices -e

# List only physical (USB) devices
adb devices -d

Restart ADB Server

adb kill-server
adb start-server

Use when adb devices shows no devices even though an emulator is running or a device is connected via USB.

Connect to a Specific Device

# Use -s with device serial for single-target commands
adb -s <device_serial> install app.apk

# Use -e for emulator
adb -e install app.apk

# Use -d for physical device (USB)
adb -d install app.apk

Installing & Managing APKs

Install an APK

# Basic install
adb install /path/to/your-app.apk

# Reinstall (overwrite existing app, keeps data)
adb install -r /path/to/your-app.apk

# Install to emulator
adb -e install /path/to/your-app.apk

# Install to specific device
adb -s <device_serial> install /path/to/your-app.apk

Uninstall an App

adb uninstall <package_name>

# Example: EUDI Wallet
adb uninstall eu.europa.ec.euidiw

# Example: France Identité
adb uninstall fr.gouv.interieur.franceidentite

List Installed Packages

# List all packages
adb shell pm list packages

# Filter by keyword
adb shell pm list packages | grep -i eudi
adb shell pm list packages | grep -i france
adb shell pm list packages | grep -i identite

W3C Digital Credentials API — Provider Registration

Check Registered Credential Providers

# List all credential providers registered with Android CredentialManager
adb shell dumpsys credential

Interpretation:

  • Empty/missing output → No wallet has registered as a CredentialProviderService with Android’s CredentialManager on this device.
  • Populated output → Wallets that implement a CredentialProviderService will appear here. Look for entries under credential-services.

Important caveat: Some wallets (including the EUDI Wallet) implement Annex C Sub-protocol B using an Activity intent filter on their MainActivity (for actions androidx.credentials.registry.provider.action.GET_CREDENTIAL / androidx.identitycredentials.action.GET_CREDENTIALS) instead of a CredentialProviderService. This approach does NOT appear in dumpsys credential.

Unfortunately, this Activity-based approach does not work with Chrome on Android 14+. Chrome delegates to Android’s CredentialManager, which only dispatches to CredentialProviderService implementations — not to Activities with intent filters. The DC API request is never received by the wallet.

See eudi_wallet_dc_api_analysis.md for the full analysis.


DNS & Network Configuration

Map demo.ewqwe.local to Host Machine (Emulator)

For the Android emulator, the host machine is reachable at 10.0.2.2. Map the demo domain inside the emulator:

adb root && adb shell "echo '10.0.2.2  demo.ewqwe.local' >> /etc/hosts"

⚠️ Requires adb root (only works on emulator or rooted devices). The emulator must be started with -writable-system.

Verify the Hosts File

adb shell cat /etc/hosts

Verify Network Connectivity from Emulator

# Ping your host machine from the emulator
adb shell ping 10.0.2.2

# Test DNS resolution inside the emulator
adb shell ping demo.ewqwe.local

Transferring Files (CA Certificates, APKs, etc.)

Push Files to Device

# Push a CA certificate to Downloads
adb push /path/to/ewqwe-ca.crt /sdcard/Downloads/ewqwe-ca.crt

Push CA Certificate to System Trust Store (Rooted Emulator)

adb root
adb remount
adb push /path/to/ewqwe-ca.crt /system/etc/security/cacerts/ewqwe-ca.crt
adb reboot

Pull Files from Device

adb pull /sdcard/Download/some-file.txt /local/path/

Viewing Wallet Logs (Logcat)

Filter by Process ID (EUDI Wallet)

# Stream logs for the EUDI Wallet process only
adb logcat --pid=$(adb shell pidof eu.europa.ec.euidiw)

Filter by Log Tags

# Show only specific wallet log tags
adb logcat -s "OpenId4VpManager" "PresentationManager" "WalletCore"

France Identité: Substitute the package name or tags used by France Identité.

Grep for Wallet Keywords

adb logcat | grep -iE "eudi|openid4vp|presentation|mdoc|wallet"
adb logcat | grep -iE "france|identite|annex_b|dcapi"

Clear Logcat

adb logcat -c

System Information & Debugging

Check Android Version

adb shell getprop ro.build.version.release

Check if WebView Supports W3C Digital Credentials

# Check Chrome version on device
adb shell dumpsys package com.android.chrome | grep versionName

Grant Permissions to a Wallet App

adb shell pm grant <package_name> android.permission.BLUETOOTH
adb shell pm grant <package_name> android.permission.BLUETOOTH_ADMIN
# Open an openid4vp deep link on the device
adb shell am start -d "openid4vp://?client_id=..." -a android.intent.action.VIEW

# Open a generic URL
adb shell am start -d "https://example.com" -a android.intent.action.VIEW

Force-Stop and Clear App Data

adb shell am force-stop <package_name>
adb shell pm clear <package_name>

Reboot the Emulator/Device

adb reboot

Testing Certificates

Inspect Certificate Chain

openssl x509 -in your_fullchain.pem -noout -issuer
openssl x509 -in your_cert.pem -noout -subject -issuer

Download Root CA Certificates (e.g., Let’s Encrypt)

curl -s https://letsencrypt.org/certs/isrgrootx1.pem -o isrg_root_x1.pem
curl -s https://letsencrypt.org/certs/isrg-root-x2.pem -o isrg_root_x2.pem

Android Emulator-Specific Commands

Cold Boot

Use when the emulator is unresponsive or has stale state. In Android Studio: Device Manager → Right-click device → Cold Boot Now

Enable Hardware Keyboard

In Android Studio emulator settings, enable “Hardware keyboard present” to use your computer’s keyboard.

Grant Superuser (root)

adb root

Only works on emulator images or rooted devices. Required for modifying /etc/hosts or system-level CA certificates.

Remount System Partition as Writable

adb remount

Required after adb root to push files to system partitions like /system/etc/security/cacerts/.


Quick Reference by Use Case

What You NeedCommand
See connected devicesadb devices
Install an APKadb install /path/to/app.apk
Force reinstalladb install -r /path/to/app.apk
Check W3C credential providersadb shell dumpsys credential
Map demo domain in emulatoradb root && adb shell "echo '10.0.2.2 demo.ewqwe.local' >> /etc/hosts"
Push CA cert to Downloadsadb push cert.crt /sdcard/Downloads/
Push CA cert to system storeadb root && adb remount && adb push cert.crt /system/etc/security/cacerts/
Stream wallet logsadb logcat --pid=$(adb shell pidof <package>)
Filter logcat by tagsadb logcat -s "Tag1" "Tag2"
Search logs for keywordsadb logcat | grep -iE "eudi|openid4vp"
Restart ADB serveradb kill-server && adb start-server
Check Android versionadb shell getprop ro.build.version.release
List installed packagesadb shell pm list packages | grep -i <keyword>
Open a deep linkadb shell am start -d "<url>" -a android.intent.action.VIEW
Force-stop an appadb shell am force-stop <package>
Clear app dataadb shell pm clear <package>
Reboot deviceadb reboot
Root the emulatoradb root
Remount system as writableadb remount

References