Downgrading the OnePlus 7 Pro for LineageOS
I’ve had a OnePlus 7 Pro sitting in a drawer for a couple of years. I used it from 2019, found it too big, got a Pixel 5, and now I’m on the Pixel 7a. The usual thing, fiddling with an old gadget that’s been kicking about doing nothing. It’s a nice phone with nice features. Shame it’s stuck on such an old version of Android. Time to get LineageOS on there.
The bootloader problem
With the Android 12-based OxygenOS the bootloader can’t be unlocked. To get around this I needed to downgrade to Android 11 first.
The URLs floating around the internet for the official rollback packages are broken, the oxygenos.oneplus.net domain doesn’t serve them anymore. The files still exist on AWS though. Just swap the domain:
https://oxygenos.oneplus.net/OnePlus7ProOxygen_21.E.41_OTA_0410_all_2112101752_downgrade_3821c2d4496c48fc.zip
becomes:
https://s3.amazonaws.com/oxygenos.oneplus.net/OnePlus7ProOxygen_21.E.41_OTA_0410_all_2112101752_downgrade_3821c2d4496c48fc.zip
I found this via a thread on the OnePlus community forums.
Downgrading to Android 11
- Download the rollback update package using the S3 URL above
- Enable Developer Options (tap the build number 7 times in Settings → About Phone)
- Enable USB Debugging in Developer Options
- Push the file to the phone:
adb push OnePlus7ProOxygen_21.E.41_OTA_0410_all_2112101752_downgrade_3821c2d4496c48fc.zip /sdcard/
- On the phone, go to Settings → System → About Device → System Updates → Local Install
- Pick the zip, extract, and hit Install Now (the phone will reboot)
Unlocking the bootloader
After the downgrade completes:
- Enable Developer Options again
- Enable USB Debugging again
- Reboot into fastboot:
adb reboot bootloader
- Unlock the bootloader:
fastboot oem unlock
Installing LineageOS
The LineageOS installation guide for the OnePlus 7 Pro (guacamole) covers this in detail. The rough process:
Flash the partition images:
fastboot flash dtbo dtbo.img
fastboot flash vbmeta vbmeta.img
Reboot back into fastboot and flash the boot image:
fastboot reboot bootloader
fastboot flash boot boot.img
Factory reset from the recovery, then sideload LineageOS and GApps (I wanted the Play Store):
adb sideload lineage-23.0-20260202-nightly-guacamole-signed.zip
adb sideload MindTheGapps-16.0.0-arm64-20250812_214353.zip
Reboot the device and it’s done.
LineageOS 23 runs fine. An evening spent downgrading from Android 12 to 11 so I could upgrade to 16, as one does. Back in the drawer it goes.
Related posts
- Installing Android on the Nintendo Switch
A banned Switch sitting on a shelf is prime hardware for Android. Turns out the Tegra X1 that powered Breath of the Wild runs a full Android OS surprisingly well.
- Exploring OTA firmware updates on the Mangmi Air X
After reviewing the Mangmi Air X, I got curious about how the firmware updates worked. Mangmi have been pushing updates fairly regularly, which is great to see on a budget device. Officially they release full update packages via Google Drive links, but those have a tendency to disappear over time. I wanted to access the OTA update packages directly and back them up to archive.org alongside the original firmware.
- Some Notes About Android Virtual Devices
Running AVD emulator from the Windows command line/Powershell/mingw32 This assumes you’ve got Android Studio installed. First you need to have the tools path in your $PATH variable, to do this edit Path in Windows’ Environment variables to include for example: C:\Users\Max\AppData\Local\Android\Sdk\tools Then you can use emulator.exe from anywhere. The Android Studio docs fail to mention this. $ emulator -no-boot-anim -accel auto -writable-system -no-snapshot -gpu host -avd K10_API_22 Installing Google Play Services I’ve been messing around with older device profiles, and trying to run things in Chrome on Android 5.0 (API level 21). You’ll need to sideload the Google Play services system APKs (from a gapps package for your target system, e.g. for Android 5.0, but you might find that the /system partition is full. No problem, you can sideload to /sdcard and symlink: $ adb remount # Fails... $ adb push .\GmsCore.apk /system/priv-app $ adb: error: failed to copy '.\GmsCore.apk' to '/system/priv-app/GmsCore.apk': No space left on device # Works... $ adb push .\GmsCore.apk /sdcard/system/priv-app $ adb push .\GoogleLoginService.apk /sdcard/system/priv-app $ adb push .\GoogleServicesFramework.apk /sdcard/system/priv-app $ adb push .\Phonesky.apk /sdcard/system/priv-app # Symlink them $ adb shell ln -s /sdcard/system/priv-app/GmsCore.apk /system/priv-app/GmsCore.apk $ adb shell ln -s /sdcard/system/priv-app/GoogleLoginService.apk /system/priv-app/GoogleLoginService.apk $ adb shell ln -s /sdcard/system/priv-app/GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework.apk $ adb shell ln -s /sdcard/system/priv-app/Phonesky.apk /system/priv-app/Phonesky.apk $ adb shell stop $ adb shell start Messing around with /etc/hosts It’s trivial to edit the /etc/hosts on your AVD, but it only works if you have blank new line at the end of the hosts file. $ adb pull /etc/hosts hosts $ nano hosts # make your changes to the hosts file locally... $ adb push hosts /etc/hosts
Discussion
- 2026
- W
I was in a similar situation and your post helped me move to LineageOS. Thanks!
Shared on r/LineageOS
Join the conversation
Comment on the GitHub issue, or reply from your own site with a Webmention (how?).
