I recently faced every Bitcoiner’s nightmare: I had just bought my first Bitcoin, set up Blockstream Green with a Lightning account, and suddenly the app on my Android phone started crashing immediately at startup. My Lightning funds were locked inside my phone, and unlike with on-chain Bitcoin, writing down my seed phrase wasn’t enough — Lightning state lives on-device.

I contacted Blockstream support right away. Unfortunately, the process was long, and their answers didn’t solve anything:

  • They suggested updating the app — but I was already on the latest version.
  • They suggested making a backup — but for Lightning, a seed alone won’t restore your state.

That’s when I realized: if I wanted to save my coins, I needed to find a solution myself.


Step 1: Back up everything before testing

Before experimenting, I made sure to back up the app data. This was critical, because my Lightning channels lived inside my phone.

adb backup -apk -obb -shared com.greenaddress.greenbits_android_wallet

This backup contained a SQLite database with encrypted_data, pin_data, wallet_id, and network. It confirmed that both on-chain (electrum-mainnet) and Lightning (greenlight-mainnet) information was stored locally.


Step 2: Attempting decryption (and knowing when to stop)

I explored whether I could decrypt the stored data using my PIN and the app’s own encryption scheme:

🔐 Encryption Algorithm Overview

  • Key derivation: PBKDF2 with HMAC-SHA512
  • Inputs: PIN + salt (base64-decoded) + 100,000 iterations
  • Output: 32-byte AES-256 key
  • Decryption: AES-256 in CBC mode; IV = first 16 bytes of encrypted_data

I tried writing a Python script to decrypt this, but after a few attempts I decided not to push further. Decrypting wasn’t the real goal — restoring a working app environment was.


Step 3: Investigating crash logs with ADB

Next, I turned to logs.

Find the package name:

adb shell pm list packages | grep green
com.blockstream.green

Find the running process ID:

adb shell pidof com.blockstream.green
12345

Dump logs:

adb logcat --pid=12345 > green_crash_log.txt

The logs revealed the issue:

java.lang.IllegalArgumentException: Invalid notification (no valid small icon)

Translation: the app was trying to start a foreground service (likely for Lightning operations) but failed because the required notification icon was missing. This was a coding bug — not data loss.


Step 4: Reinstall attempts and support dead ends

Support had advised me to update, but reinstalling the latest APK didn’t help. For example:

adb install -r blockstream_green.apk
adb.exe: failed to install .\BlockstreamGreen-v4.1.8-productionGoogle-release.apk: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]

After enabling Allow USB installs, the reinstall worked:

adb.exe install -r .\BlockstreamGreen-v4.1.8-productionGoogle-release.apk
Success

But the crash persisted.

At this point, I went beyond what support had suggested: try a downgrade.


Step 5: Downgrade as the real fix

Attempting to install v4.1.5 at first failed:

adb.exe install -r .\BlockstreamGreen-v4.1.5-productionGoogle-release.apk
adb.exe: failed to install .\BlockstreamGreen-v4.1.5-productionGoogle-release.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

Solution: add the -d flag to force a downgrade.

adb.exe install -r -d .\BlockstreamGreen-v4.1.5-productionGoogle-release.apk
Performing Streamed Install
Success

And just like that: the older version opened successfully, my wallet loaded, and my Lightning funds were safe.


Conclusion: what I learned

  • Lightning is device-dependent. A seed phrase isn’t enough. Backups of the app state are critical.

  • Support isn’t always enough. The official team couldn’t resolve this issue — updating and backing up weren’t real fixes.

  • Logs point to answers. ADB logcat gave me the exact reason for the crash: a missing notification icon.

  • Downgrade = lifesaver. Reverting to v4.1.5 bypassed the bug and restored full access to my funds.

  • The relief is unforgettable. After hours of uncertainty, finally seeing my wallet open again was the moment I knew I had saved my Bitcoin from vanishing.


✨ This experience taught me to always back up, to follow the data, and not to rely solely on official fixes when dealing with critical funds. Sometimes, the only way forward is persistence, patience, and a willingness to get your hands dirty with the technical details.