Resurrect an old smartphone

Everyone of us has probably old smartphones somewhere and some of them would work with a reasonably current Android. My previous previous smartphone was a OnePlus 3, which has been sitting in the drawer for the past few years. I already unlocked it back in the days and installed LineageOS (Version 15.1 - Android 8.1). The current Version for the OnePlus 3 is LineageOS 18.1 (which is not the current Android, but good enough). An update from 15.1 to 18.1 without deleting everything on the phone is not easily possible so I will install 18.1 via recovery. The LineageOS website has a step by step guide which I only need half of because the phone is already unlocked.

Disclaimer: I am doing this with an old phone I had in a drawer for years. If you don't know what you are doing, don't ever do this with a phone you rely on.

I used adb on ArchLinux to sideload everything.

After starting the phone in fastboot mode, I checked if the device is found from my Linux PC:

$ fastboot devices
2b7f3166        fastboot

Yay.

Meanwhile: updating the radio/modem

I tried to install the new LineageOS version as described below, but the radio/modem was too old. So I needed to update this first.

First I installed the current version of twrp, because I already installed LineageOS recovery: Instructions and Download. Now install recovery (the phone needs to be in the bootloader):

$ fastboot flash recovery twrp-3.7.0_9-0-oneplus3.img
Sending 'recovery' (29821 KB)                      OKAY [  1.011s]
Writing 'recovery'                                 OKAY [  0.216s]
Finished. Total time: 1.271s

Next start the twrp mode by booting the phone into recovery.

I got the radio from the official OnePlus website included in the final update of OxygenOS 9: OnePlus3Oxygen_16_OTA_086_all_1911042118_997006918a894202.zip. Additionally I got the radio+modem from this xda-forum link. The files inside are the same, but without the boot image. So installing the xda-forum zip file via sideload updates only the relevant parts:

$ adb sideload Stable9.0.6\ Firmware+Modem_OnePlus3.zip
serving: 'Stable9.0.6 Firmware+Modem_OnePlus3.zip'  (~51%)    adb: failed to read command: Success

The message on the phone was that it was successful.

Updating to Android 11 (LineageOS 18.1)

Now back to the actual update.

Maybe I could use twrp for this too, but I wanted to use the LineageOS recovery image. I downloaded it from this page: https://download.lineageos.org/oneplus3

Flashed it:

$ fastboot flash recovery lineage-18.1-20230201-recovery-oneplus3.img
Sending 'recovery' (19361 KB)                      OKAY [  0.632s]
Writing 'recovery'                                 OKAY [  0.148s]
Finished. Total time: 0.827s

image of the phone in recovery start screen

For the next step I downloaded the correct LineageOS version for my phone: lineage-18.1-20230201-nightly-oneplus3-signed.zip. And the Google Apps package for Android 11.0 arm64: MindTheGapps-11.0.0-arm64-20220217_100228.zip.

In recovery then "Factory reset", then "Format data/factory reset". Be aware that everything on the phone will be deleted! For me this is a phone I haven't touched in years, so nothing relevant is on there.

Next step is "Apply update", "Apply from ADB". The instructions how to do this are on the phone screen:

$ adb sideload lineage-18.1-20230201-nightly-oneplus3-signed.zip
Total xfer: 1.00x

The radio/modem to old error was: "Modem firmware from OxygenOS 9.0.2 or newer stock ROMs is prerequisite to be compatible with this build." Now everything works, because the updated radio/modem already happened.

And next the Google apps:

$ adb sideload MindTheGapps-11.0.0-arm64-20220217_100228.zip
Total xfer: 1.00x

The signature is always invalid. So accepting this is "fine".

Now the phone can be rebooted and boots Android 11 (LineageOS 18.1). 🥳