*** Disclaimer ***I am not responsible for any damage you cause to your device.
You have been warned.
crDroid is built on top of LineageOS, and is designed to increase performance and reliability over stock Android for your device, while also attempting to bring you many of the best features in existence today.
- OnePlus Camera & Gallery fully working (using APKS extracted directly from OOS 188.8.131.52); including 60fps in 1080p & 4K, watermark, depth effect, smart content detection, et al.
- DeviceExtras for OnePlus-feature-specific customizations including alert slider modes, DC dimming, High Brightness Mode including customizable Auto-HBM threshold, customizable rendered FPS overlay, digital earpiece/mic gain controls, built-in UI jitter test, USB 2.0 force-fast charge mode toggle (requests 900mA from compatible motherboards, turn off when not using because it conflicts with DASH charging), and 3-category vibration strength control (thanks to AnierinBliss for all his work on this implementation).
- OnePlus-style color modes available through LiveDisplay (6 & 6T have slightly different implementations and you may not notice a difference, but think of "Natural" and "Wide Gamut" like uncalibrated versions of "sRGB" and "DCI-P3").
- Ongoing kernel tuning (trying to get the best of both worlds tuning existing QTI perfd & scheduler & lmk, rather than cutting over to Google libperfmgr/powerhints/userspace lmk, definite improvements over vanilla LOS, mostly importing/adapting work by EdwinMoq).
A quick glossary and primer on flashing & slots for A/B devices (like ours):
- "Clean flash": Removing device protection & clearing user settings before installing a bootable system install zip by formatting data.
- "Dirty flash": Flashing a ROM zip (usually upgrading to new version, sometimes just re-flashing the existing one) without wiping data or anything first.
- "Wipe data": This used to be synonymous with "factory reset" in TWRP, without formatting the data partition and losing the contents of internal storage. Now, with TWRP being deprecated and using built-in LineageOS-based recovery, "wipe data" and "factory reset" mean the same thing as "format data" (which means, everything in internal storage gets erased).
- "Format data": Formats the data partition itself, resets all file-based encryption keys, loses all contents of internal storage, and in fact deletes all "user 0" directories (this has some implications for internal storage before & after first boot).
- "User 0" directories are a series of directories that store userdata for the primary user, "Owner", and get created in various places throughout the filesystem on first system boot if they don't exist already. Anything you copy to "internal storage" while booted in recovery after "formatting data" will actually be copied to /data/media/ instead of /data/media/0/, and will become invisible to regular file browsing after first boot once the system has created /data/media/0, since the system will prefer to use that path for internal storage from then on (so you'll need a root file browser to delete things from /data/media, or just ADB sideload things instead of copying after formatting but before booting).
- "OTA package": Originally an abbreviation for "over the air", referring to how a software update could be delivered (as opposed to having to take your phone to a carrier's store for a firmware update via serial/USB connection). The common usage in Android circles is any installation zip file that actually includes a bootable system. Is always installed to the currently "inactive slot", and will trigger a slot switch upon the next reboot.
- Some partitions are duplicated (system, vendor, boot, and probably a couple others, but not data) and have a "slot A" & "slot B" copy.
- "Slot A" and "slot B" are absolute designations, but most installer zip scripts use the relative designations: "active" and "inactive". Whichever slot you're booted from currently is "active", and the other one is "inactive".
- Installing a zip file that's flagged as being an OTA package will 1) install the contents to the "inactive" slot, and then 2) flag the bootloader to switch which slot is considered "active" (and booted from) and "inactive" upon next reboot.
- The OxygenOS full OTA zip files and all custom ROM installer zip files are considered "OTA packages" and will trigger a slot switch on next boot after installation.
- You can install multiple OTA zip packages one after the other without rebooting in both the stock recovery and TWRP; they will all get installed into the correct partitions in the "inactive" slot, one on top of the other, and then it will swap active & inactive upon reboot.
- We don't use what are called "delta" updates, which can patch existing partitions by block or by file; we use full filesystem images. So for us, OTA zip packages are really just a bunch of partition filesystem image files all wrapped up into a "payload.bin" with some extra instructions & metadata/checksums, so when you flash a ROM, it overwrites entire partitions at a time instead of individual files or filesystem blocks within that partition. So if you've changed something in a partition like system that gets written as part of flashing an OTA zip, all your changes are gone. The only thing in the system partition afterward will be what was in the system.img that was included in the ROM zip payload.
- The partitions that crDroid, LineageOS, and most custom ROMs for OnePlus 6 & 6T install to when flashing are boot (contains recovery & kernel), dtbo, system, vbmeta, and now vendor as of Android 12. If you are planning on going back to an Android 11 ROM that does not build the vendor partition from source (so everything except SyberiaOS, essentially), you'll need to flash the OOS stock vendor partition to both slots from fastboot before installing the OTA zip.
- "Prebuilt vendor" vs. "source-built" vendor partitions: when first trying to get a custom ROM working on a new device now that we have separate system & vendor partitions & Google's "Project Treble" is a thing, you'll often just leave the contents of the vendor partition alone, because that's where all the proprietary or device-specific stuff lives (manufacturer specific hardware drivers & interfaces, any DRM libraries, custom frameworks & selinux policies for talking to them), and you make a compatibility map of what framework versions you're compiling against in system and what vendor version they're compatible with or supersede or you overlay updated things that should replace stuff in the vendor partition and keep it in system_ext instead. But you're also limited in that if there are some things in vendor, you CAN'T work around it from the ROM side (like, OnePlus Camera working correctly). So often, once the basics are functioning, the goal is to move to building the contents of the vendor partition from source, because you then have the freedom to fix problems with sepolicy, library/framework mismatches, etc. and make things work with the custom ROM instead of only working with the OEM's flavor of Android, and you can still copy individual pre-compiled files from the stock vendor filesystem image if needed (like if there's no open-source equivalent for some driver). We finally got a source-built vendor bringup for OnePlus SDM845 (enchilada & fajita) as part of the Android 12 (lineage-19.1) bringup, so some things work better, and some things work worse, but at least it's possible to fix things and keep moving forward to newer Android versions. However, since we're still dependent upon at least SOME binary blobs copied over from OxygenOS 184.108.40.206, the vendor patch level will remain at the release date for the last release of OOS 11, because we can't know for sure that some component isn't vulnerable, no matter how new all of the source-built components are.
- "Updating firmware" simply means we're flashing updated contents from the manufacturer into all the OTHER partitions besides the ones that the ROM OTA zip touches. There are another dozen or more of those, besides system & boot, that the full OxygenOS OTA zip would normally write to when you install it. The contents of the system & vendor partitions in custom ROMs for our device are generally built against a particular version of OxygenOS; in this case OOS 220.127.116.11 was the final release by OnePlus before they announced the end of support & updates for the OnePlus 6 series. Some people are still on older firmware that is now dramatically different than what the current custom ROM was intended to deal with (that is, all the stuff from OxygenOS is still based on Android 10, while the ROM is expecting VNDK compatibility with Android 11), and while I tend to agree that OxygenOS 10 was better than 11, that doesn't matter when you're talking about installing the custom ROM over it. So please; update to OOS 18.104.22.168 firmware (see instructions below).
Notes on stock recovery & TWRP:
- TWRP is deprecated & unsupported, for purposes of bug reporting & getting help with crDroid. I liked it personally, and I agree with all the reasons for wanting to try and keep using it; but the source is a hot mess, and the official releases for enchilada & fajita don't have good compatibility with Android 12 (they can't decrypt file-based encryption for userdata).
- Meanwhile, the stock crDroid recovery (based on LineageOS) intentionally cannot decrypt userdata, and doesn't correctly process addon.d OTA survival scripts; so after using it to flash any OTA zips, you'll need to reboot to recovery and manually flash things like Magisk or GApps installers. But for all those shortcomings, it has working fastbootd (aka "Userspace fastboot", which is what happens when you go to "Advanced", then choose "Enter fastboot") that lets you flash one image to both slots at once with a single command, and unlocks critical partitions... while the OnePlus OEM bootloader (where it says "Fastboot Mode" in a square, then goes to the big green "START" text over white & dark red terminal font type text) can't be used to flash every partition to update firmware. Personally, I still think of it as wannabe-class and not a "real" custom recovery until the Lineage team 1) implements userdata decryption so you can manage files in /data and install updates from internal storage, and 2) allows for a factory reset the way we've always all understood it ("wipe data") WITHOUT nuking the contents of internal storage for no good reason ("formatting data"). But they're not going to, and since crDroid is LineageOS-based; it's what we've got, and fastbootd is the best way to update firmware.
- The takeaway: If you want to try different custom recoveries (new builds of TWRP, OrangeFox, PBRP, whatever), feel free; and let us know how it works! But you're on you're own doing that; it's an unsupported configuration.
- For purposes of doing updates, plan on doing your initial installation from bootloader & recovery then applying subsequent system OTA updates using the built-in Updater tool (Settings > System > Updater), both with new OTA releases and when choosing a file from "Local Installation". It executes OTA survival scripts correctly from /system/addon.d/ as well. I've personally tested and it correctly preserved Magisk canary for several versions, and MindTheGapps & NikGapps on my tester fajita and MinMicroG "system" install package on my daily driver enchilada.
- Make sure your bootloader is unlocked (and don't plan on relocking it ffs).
- Make sure you have a reasonably-current, working installation of android platform tools (adb & fastboot command line binaries & necessary drivers) on your computer, USB drivers, and a known-good USB cable (see links in post #2).
- Make sure you've downloaded the most recent full OxygenOS OTA installer zip (22.214.171.124), crDroid zip, matching crDroid boot.img, and whatever Magisk/GApps/microG installation packages you want to use to your computer (see links in post #2).
- Make sure you've backed up whatever data you want to keep to somewhere that's not on your phone; for a new install, we're going to format the data partition and you're going to lose everything from internal storage.
- If you don't KNOW you already have OOS 126.96.36.199 flashed to BOTH slots, follow the "Updating Firmware" instructions below.
- Reboot phone to bootloader (no USB cable connected).
- If you're not already using the stock crDroid recovery, you'll need to '
fastboot flash boot path/to/boot.img' on the computer, substituting in the path & filename for the current crDroid boot.img that you downloaded as part of the prerequisites.
- Reboot to bootloader again (actually loads new bootloader that you just flashed).
- Use Vol +/- buttons to select "Recovery mode" and press Pwr button to boot stock recovery.
- Tap "Advanced", then tap "Enter fastboot" (the already-selected first option).
- Follow the instructions for extracting the partition images from the official OxygenOS Updater full OTA zip you already downloaded using the "payload-dumper-go" utility, and flashing them one at a time, from https://wiki.lineageos.org/devices/enchilada/fw_update or https://wiki.lineageos.org/devices/fajita/fw_update, except for the very last command ('
- If you're only updating firmware and were already on crDroid, you can just 'fastboot reboot' which will go back to booting the system normally. If this is part of coming to crDroid 8.x from another ROM, continue with the instructions below.
First time installation:(when coming from any other ROM or crDroid 7.x or earlier)
- *Back up anything you want to keep from three phone's internal storage to your computer/cloud storage, because we're going to format the userdata partition in this process.*
- Download boot.img & rom zip to computer.
- Reboot phone to bootloader.
- Flash boot image to both slots ('
fastboot flash boot_a boot.img' then '
fastboot flash boot_b boot.img').
- Reboot phone to bootloader.
- Use vol +/- keys to select recovery mode & press power button to enter recovery.
- On phone, choose "Factory reset / Wipe data", and confirm (note: this will erase everything from the phone's internal storage; make sure that you have backed up anything you want to keep first!).
- On phone, choose "Apply update" > "ADB sideload" & then from computer, '
adb sideload path/to/rom.zip' (substituting the actual path to the actual filename) to sideload the installation zip; the orange recovery header graphic will disappear until the process has completed ("error" messages like "no error", or finishing at 47% on the computer are normal).
- On phone, choose "Advanced" > "Reboot recovery" to reboot into recovery on the newly-flashed slot.
- Use adb sideload to flash any magisk or GApps or microG installer zips (some installers might require you to choose "Advanced" > "Mount/unmount system" first).
- Reboot into system.
- Use the built-in Updater ("Settings > System > Updater") to apply OTA updates as they become available, or to manually flash a ROM zip by going to the three-dot menu in the upper right and choosing "Local update". Seriously, that's it; it processes addon.d survival scripts correctly, including Magisk, MindTheGapps, NikGapps, MinMicroG, and presumably others.
- Reboot phone to recovery.
- Choose "Apply update > Apply from ADB" on the phone, and '
adb sideload path/to/installation.zip' from a terminal on the computer.
- After installation has completed and the menus have reappeared on the phone, go back, then choose "Advanced > Reboot to recovery" on the phone.
- Choose "Apply update > Apply from ADB" on the phone, and '
adb sideload path/to/installation.zip' for each addon like Magisk or GApps installation zip you need in order to match what was initially installed on the phone.
- Reboot system.
Reporting bugs:I'm the full-time parent-in-charge at home of three young children & primary housekeeper while my wife works full-time. I have a small business on the side I'm trying to keep afloat.
This is what I do on a volunteer basis in my spare-time's spare time. So please, don't waste what little time I have.
- Logs/screenshots/recordings or it didn't happen. Either the built-in Matlog app, or Syslog if you're rooted (free, open source, available on Play store and F-droid) are your friends here. Tombstones, dmesg if you're rooted, pstore/ramoops from recovery after a crashdump are worth their weight in gold if you know how to get those.
- If you're not running a supported configuration, don't expect much help (see below).
- I won't always be able to fix your problem, but if you get me usable logs, I'll at least look and do my best to get help from the ROM dev team if I can't figure it out.
- I don't sign into XDA much, so if I haven't replied to you in a while, check out the Telegram group. Lots of helpful folks there.
- Please keep your questions in this thread instead of PMing me with them directly, so that the entire class can benefit from the discussion and you can find out if it's just you or if this is a widespread issue.
It's your device to use the way you want of course, but don't expect support for your bug reports if you:
- didn't update firmware in both slots.
- didn't do a clean flash.
- installed with TWRP/any other custom recovery (or, worse yet, installed that custom recovery after).
- aren't using the built-in kernel.
- are using extensive modifications & Magisk modules like Xposed/Riru, Dolby Atmos, Viper4A, etc.
- immediately start flashing "finalize.zip" or migrate restore zips instead of following the actual instructions.
- are running decrypted (ugh, just don't).
- re-locked your bootloader for some reason... you're on a custom ROM; don't do that.
- followed some other installation method different than the steps above.
Links:Visit the official website at crDroid.net
crDroid OnePlus 6/6T Telegram Group
crDroid Community Telegram Group
crDroid Updates Telegram Channel
Donate to help our team pay server costs (PayPal or Patreon)
Donate to support me in maintaining this device (PayPal or Patreon)