[ROM][12.1][Official]crDroid Android[v8.14][March 2023 ASB]

Search This thread
NOTICE: crDroid 8.x (Android 12) is moving into maintenance-only release mode, and no new feature changes should be expected.
I'll be merging monthly Android Security Bulletins from upstream as they're available, and pushing releases, but they'll be blind builds going forward.
Please consider updating to crDroid 9.x (Android 13):
crDroid 9.x XDA thread - OP 6/6T
BE3pE0l.png

*** Disclaimer ***​

I am not responsible for any damage you cause to your device.
I hope you like reading.
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.

Features:​

General:​

See our current feature list at our GitHub!

Device-specific:​

  • OnePlus Camera & Gallery fully working (using APKs directly from OOS 11.1.2.2 or apkmirror.com with verifiable signatures; currently shipping OnePlus Camera v3.14.40 and OnePlus Gallery v4.0.297); including 60fps video recording in 1080p & 4K, watermark, depth effect, smart content detection, actually-working HDR, 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, 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 and mcdachpappe).

Everything you never wanted to know about slots & A/B devices (but have been forced to find out):​

  • "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 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 "inactive" upon next reboot; causing it to attempt to boot from the formerly-inactive slot's boot partition.
  • 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 11.1.2.2, 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 11.1.2.2 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 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 this custom ROM over it. So please; update to OOS 11.1.2.2 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 has been described as a hot mess, the official releases for enchilada & fajita have not had good compatibility with Android 12 or newer (trouble with decrypting file-based encryption for userdata), and there are too many variations & unofficial TWRP-based recoveries for me to keep track of.
  • Meanwhile, the stock crDroid recovery (based on LineageOS) intentionally cannot decrypt userdata, and doesn't correctly process addon.d OTA survival scripts on A/B devices; 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 "proper" custom recovery until the Lineage team 1) implements userdata decryption so you can manage files in /data and install updates from internal storage, 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"), and 3) gets the updater to call backuptool correctly & process addon.d OTA survival scripts on A/B devices. 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.
  • The built-in recovery DOES support use of a USB thumb drive and will mount it in OTG mode, so any place in the instructions you see "adb sideload", you can instead copy all your things to a FAT32- or exFAT-formatted USB stick and then apply the update from there instead.

Flashing Instructions:​

Pre-installation prerequisites:​

  • 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 (11.1.2.2), 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 11.1.2.2 flashed to BOTH slots, follow the "Updating Firmware" instructions below. You may also want a utility like 7-zip in order to extract .tgz files under Windows.

Updating Firmware:​

  • Reboot phone to bootloader (no USB cable connected until you've entered OEM bootloader).
  • 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 listed above.
  • Reboot to bootloader again (actually loads new bootloader contents 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 ('fastboot reboot').
  • 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 9.x from another ROM, continue with the first-time installation instructions below.

First-time installation:​

(when coming from any other ROM or stock OOS 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 "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 "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 "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.
  • ???
  • Profit!

Update installation:​

  • 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.
If you must flash from recovery, then be aware that the stock crDroid recovery does NOT process addon.d OTA survival scripts correctly on our A/B system-as-root device, so you'll need to do the following:
  • 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 (or use a USB drive with appropraite files copied to it and choose OTG as the update source instead).
  • 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.

Please see post #2 for current boot.img files, information about Google apps & microG, release notes, installation notes, known issues, and lots of helpful links.
Please see post #3 for information about bug reporting & troubleshooting.

Sources:​

ROM:​

https://github.com/crdroidandroid

Device trees:​

https://github.com/crdroidandroid/android_device_oneplus_enchilada
https://github.com/crdroidandroid/android_device_oneplus_fajita
https://github.com/crdroidandroid/android_device_oneplus_sdm845-common
https://github.com/crdroidandroid/android_hardware_oneplus/tree/12.1-op6

Kernel:​

https://github.com/crdroidandroid/android_kernel_oneplus_sdm845

Vendor-specific:​

https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_enchilada
https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_fajita
https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_sdm845-common
https://gitlab.com/crdroidandroid/android_vendor_oneplus_apps
https://github.com/Terminator-J/vendor_ih8sn

Download:​

ROM:​

https://crdroid.net/enchilada/8
https://crdroid.net/fajita/8

Changelog:​

https://crdroid.net/enchilada/8#changelog
https://crdroid.net/fajita/8#changelog

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)
 
Last edited:

General Notes:

  • Maintainer is only actively working on crDroid 9.x (Android 13) primarily and running that as daily driver. We'll be relying on community members in the Telegram group to verify any regressions/new issues in Android 12.1 builds, but will continue to release as new monthly security patches are merged in crDroid sources.
  • Yes this ROM supports package signature spoofing permission for microG compatibility out of the box (but will work without ANY GApps/microG implementation installed as well).
  • Requires OOS 11.1.2.2 firmware (last official release). You should consider using an Android 10 ROM if you want to continue using Android 10 firmware.
  • Tested against latest Magisk canary, works well.
  • No there won't be official builds with inline GApps; please don't ask. The dev team's policy is vanilla-only whenever possible (and it's very possible with our devices).

Google Apps:​

Maintainer doesn't often use Google Apps personally as daily driver, but here are some notes gathered from peoples' testing:
  • TL;DR: Use MindTheGapps.
    Otherwise, in general, try to go with the lightest weight package you can and don't replace the stock dialer/messaging apps (just download them from Play Store and set defaults).

  • Since we are LineageOS-based, here are the Lineage team's recommendations & reasoning:
    https://wiki.lineageos.org/gapps.html

  • MindTheGapps are recommended and considered the default supported configuration for either Android 11 or 12 (per the LineageOS wiki, linked above). Assistant works great out of the box.
    Note on Google Keyboard: If installed as a system app, GBoard will actually do on-device speech recognition when it doesn't have a network connection, so you might want to try adding the Nik Addon for Gboard on top of MTG, just to get on-device speech recognition as an input method (someone please test this out & report back?), but not required for regular usage and GBoard works perfectly well installed from the Play Store as a user app after first boot as well.
    MindTheGapps survives built-in System Updater OTA updates, works fine after doing manual update with built-in recovery, and passes SafetyNet.
    http://downloads.codefi.re/jdcteam/javelinanddart/gapps

  • NikGapps also seems to work in Android 12.1, although it has had some issues with clobbering overlays leading to system apps triggering the privacy indicators that shouldn't be doing that. Recommend using Core plus addons, rather than going heavier from the beginning (we don't have much space left in the system partition).
    You'll need Googlesearch (the actual "Google" app) and Velvet (Assistant pacakges), plus GBoard (gets offline speech recognition if installed to system) and either SetupWizard or PixelSetupWizard for the best voice-recognition & assistant experience.
    Not the recommended GApps package, but give it a shot if you like the customization options. Survives built-in System Updater OTA updates, might have issues with re-flashing during manual updates from built-in recovery (needs testing by some brave soul), passes SafetyNet afaik.
    https://nikgapps.com/downloads#downloads

  • Flame Gapps also seems to work well in Android 11 (haven't heard reports about Android 12.1 yet), although the "basic" package is a little heavier than Nik Core, at least it doesn't start replacing stock dialer & messages. Also survives OTA & passes SafetyNet, not sure about manual updates with built-in recovery.
    https://flamegapps.github.io/download.html

  • OpenGApps are not recommended, for reasons outlined in the LineageOS wiki link above.

  • BitGApps ... exist. No idea how that's going.
Please report what worked for you, whether or not it survives updates when using the System Updater, whether or not it survives manual "dirty" update flashing via built-in recovery, and whether it passed SafetyNet, so I can keep this list updated.

crDroid 8.14 - March 2023 ASB release notes/changelog:

Changelog since v8.13 hotfix 1 release:
  • Merged February and March 2023 Android Security Bulletins & any changes from upstream LineageOS device/kernel/vendor trees (lineage-19.1 branch).
  • Whatever the ROM dev teams changed upstream in LineageOS and crDroid sources (not much? they're busy with Android 13).
  • Other misc fixes ... probably.

Installation notes:​

  • In case of bootloop (boot animation stuck for longer than about 2 minutes and never gets to lock screen), reboot to recovery and manually flash the ROM zip either via ADB sideload from computer, or from a FAT32-formatted USB thumb drive via OTG, then reboot to recovery again, and re-flash your same Google Apps/microG/Magisk/whatever install zips (again via ADB sideload or USB OTG), and reboot system. This *should* take care of any lingering errors with old things getting stuck in your /system/addon.d/ directory that might be trying to preserve old privileged system apps without privileged permissions (which is what causes those boot loops in the first place).
  • The built-in OTA updater in Settings > System > Updater goes a lot faster if you go into Updater preferences and toggle on "prioritize updater process", and make sure the screen stays on by using the Caffeine QS tile, or "never sleep while charging" toggle in Developer Options, or changing your Display timeout to 30 minutes.
  • If you experience issues with OnePlusCamera & OnePlusGallery after updating from an old version, first get App Info and clear storage & cache for both. You might have luck with "update" installing the same apk version in-place (it will ask if you want to update the app, even though it's the same version). I used OP Camera v3.14.40, which is available from here: https://www.apkmirror.com/apk/onepl.../oneplus-camera-3-14-40-android-apk-download/ and OP Gallery v4.0.297, available from here: https://www.apkmirror.com/apk/onepl...eplus-gallery-4-0-297-2-android-apk-download/. Reports are that it usually works just fine updating from official 8.7, but here are some troubleshooting steps for just-in-case.

Known issues:

  • The usual LineageOS Android 12 things (mostly that big ugly blank spot at the top after reboot before unlocking).
  • (fajita-only) The "Pocket detection" toggle in crDroid Settings > Miscellaneous will interfere with "Screen off UDFPS" (crDroid Settings > Lock screen > UDFPS customization) and "Prevent accidental wakeup" (Display settings). If you use it, turn off the others, or you might run into the screen-won't-turn-on issue. Personally, I was just dealing with having to press the power button a few extra times, because disabling "Pocket detection" ended up with me almost calling emergency services several times a day.
    Thankfully this seems to be fixed in crDroid 9 (Android 13), so I definitely recommend upgrading once that's released.
  • Maintainer is busy af in real life and takes forever to get releases out.

Helpful links:

 

Attachments

  • crDroidAndroid-12.1-20230415-enchilada-v8.14_boot.img
    64 MB · Views: 1
  • crDroidAndroid-12.1-20230415-fajita-v8.14_boot.img
    64 MB · Views: 1
Last edited:

LOGS OR IT DIDN'T HAPPEN​

How to make bug reports (and how not to):​

i appreciate bug reports, but I also need details. If an app is crashing ("FCing", meaning "force closing") then at a bare minimum, copy the crash log URL and share that with your report.
That probably won't be enough, though, which is why there are two main logs that I'll ask for:

1. logcat​

You can either use the built-in MatLog tool to acquire this, or get it via USB debugging and adb on the computer (which was in the prerequisites section of the XDA first post, so you installed platform-tools and have adb & fastboot on your PATH, riiiight? 😜)

Using MatLog
  • MatLog is shipped built-in, and it works great. It's built for an older API though, so you'll need to manually grant it permission to access all files (it doesn't know enough to ask since it's a system app and assumes itself to be privileged). If you don't, then you can only use the "Sharing" interface to save logs, rather than saving them to internal storage.
  • To use, open the MatLog app, and go into settings and tick the box for "omit sensitive info" so that you don't end up sharing your IMEI or email addresses with the world. Probably still best if you PM me the logs instead of share to the group.
  • Ideally if it's a reproducible problem, reboot, open MatLog, do the thing that causes the buggy behavior, switch back to MatLog, tap on the menu and choose "Save Zip", then send me the resulting file (they're saved to /sdcard/matlog/saved_logs/). Otherwise, try to open it as soon after the issue as possible and Save Zip.
Using ADB (Android debug bridge)
  • Since we're currently building as "userdebug", you can always grab a logcat even without being rooted. I'm assuming you've got adb and fastboot installed & can run them from a terminal.
  • Enable Developer Options if you haven't already by going to "Settings" > "About Phone" > scroll down to the bottom and tap on the "Build number" field 7 times to enable, then back up to System and choose the new "Developer options" menu, and toggle on "Enable USB debugging".
  • Connect the phone to computer via USB, then on the computer open a terminal type adb devices to start the server & verify you can see the phone. At this point you might get a prompt on the phone asking if you want to trust the computer with some ID for debugging; tell it yes (probably always yes, in case you need to do troubleshooting later due to a boot loop). You should see your phone's serial number listed under the output of adb devices in the terminal window. If not, you probably need to install OnePlus USB drivers.
  • Run adb logcat from the terminal and get ready for a wall of text. Ctrl-C to stop the firehose after about 10 seconds. Save the output to a file. Note: this is the stupid way assuming you just opened a command window or built-in PowerHhell in Windows. Any linux shell or current version of PowerShell should instead be able to just run adb logcat > logcat.txt to dump the output directly to a text file in the current working directory without the wall of text; just give it about 10-15 seconds and Ctrl-C to stop the capture.
  • That's it! PM me the file, with any other details about what's happening and your setup (device, how you flashed, GApps, and so on).

2. dmesg​

Requires root, probably USB debugging, platform-tools added to your PATH, and knowledge of what the below instructions mean
  • Open a root shell on the phone (via local terminal or adb shell via USB).
  • Run dmesg and save the output to a text file.
  • PM me the dmesg.txt file, along with a logcat capture as well, and a detailed description of what the problem is, what the behavior is you noticed, how to reproduce, details of your setup (which device, what GApps, what Magisk modules, any custom kernels, how you installed, and so on).
  • Protip: If you're not rooted, since this is a "userdebug" build, you can go into Settings > System > Developer options, turn on the toggle for "Rooted debugging", and then on your computer, do adb root to restart the adb server process. The next adb shell you run from the computer will get superuser privilege instead and you can run dmesg or do other things without having to root with Magisk.
If you are rooted, I highly recommend installing & using SysLog (by Tortel), available on the Play Store and on F-Droid; it's a GUI app that lets you easily capture both logcat & dmesg & can generate zip archives to send to your favorite maintainer, while allowing for scrubbing potentially sensitive data, and has some other advanced filtering options.

3. A detailed description of the actual problem & how to reproduce​

Maintainer is not a mind-reader
  • Describe what the actual problematic behavior is, compared to what the expected behavior is. Don't just throw a logcat at me and expect me to figure out what you think was actually wrong. Explain how to reproduce the bug, and what you were doing at the time. Give me details about your configuration: are you actually on the most current version, did you clean install, did you use the recommended MindTheGapps package, are you rooted & if so what add ons/modules/root-required utilities are you using regularly, etc.
  • A picture is worth a thousand words. Moving pictures even moreso. If you can use screenshots, or better yet a screen recording, to show me how something is failing, that helps a TON.
  • Realize that a number of things are beyond my control. I'm not a software developer, I'm not on the ROM dev team, and some things might never get resolved. It's *still* better than OnePlus though, hey? :D
  • Feature requests are not bug reports. If you don't have a stack of tested commits that you can submit as a pull request for the dev team to merge, it's not likely to happen. But you can always ask politely!

Other Notes:​

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 root-required modifications & Magisk modules like Project Themer, Xposed/Riru, Dolby Atmos, Viper4A, modified Adreno GPU drivers, etc.
  • immediately start flashing stuff like "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 in the first post.

"Supported" status - Updating from crDroid 7.x:​

To be considered a "supported configuration", I need for folks to do a clean installation when jumping from Android 11 to 12, rather than trying to migrate from crDroid 7.x (Android 11, prebuilt vendor partition) to 8.x (Android 12.1, source-built vendor partition). So do your backups accordingly, because internal storage on the phone is gonna get wiped.

It generally works to do a dirty upgrade from recovery, as long as you reboot to recovery & flash a newer version of the EXACT SAME GOOGLE APPS PACKAGE AS YOU HAD BEFORE, but there's going to be odd things broken and you're really better off doing a clean install for a new major Android version number change.

Connectivity issues:​

If you are having problems with mobile data under Android 12, try some of the following (and please let us know if one/all actually fixed things for you):
  • Go into Settings > Network & internet, scroll down to "Adaptive Connectivity" and turn it off
  • Go into Settings > Network & internet > Calls & SMS, and make sure your primary SIM is actually selected for calls, messages, and mobile data, then back up one menu level, go into SIMs, select your SIM if needed, and make sure "Mobile data" is toggled on
  • Go into Settings > Network & internet > SIMs, select your SIM, and change the radio mode to one of the ones that *doesn't* start with "NR", like "LTE/TDSCDMA/CDMA/EvDO/GSM/WCDMA" (or the one without the CDMA/EvDO stuff if you know you're not on a CDMA carrier)
  • Go into Settings > Network & internet > SIMS, select your SIM, go into Access Point Names, and make sure you've got the correct APN selected
  • Go into Phone (whatever you have for the default dialer), keypad, type in *#*#4636#*#* to open the "Testing" activity, choose "Phone information", then in the three-dot menu in the upper-right, choose "Select Radio Band" and choose the correct region instead of leaving it on "Automatic"
 
Last edited:
Nope, I just PR'd last night to go official and it was accepted. :)
crDroid 8.x has stricter requirements for device maintainers with Android 12 releases, so until now I've only been able to classify the 8.x builds I've been working on for the last several months as betas, and honestly I haven't had the time until now to set up all of the XDA pages, so they've just been linked in the Telegram chat group.
 
  • Like
Reactions: YousifG7

tomasz-c

Member
Sep 25, 2020
17
3
If you're feeling super-adventurous, you *might* be able to update to the latest release of 7.x (I'm finally getting around to making official 7.19 builds now), then reboot to bootloader, flash the boot.img to current slot, reboot bootloader, start recovery, flash the 8.x ROM zip from recovery, reboot recovery AGAIN, flash an Android 12.1-compatible version of the same Google apps or microG package you were using, plus Magisk if you're using that, and boot into system... but... I have no idea how well that will work, or not.

I can't afford to consider that an officially-supported configuration, because I have no idea what will be broken or not; but I'm interested to know if it works for you.

Thank you for your work!

I just updated on my OnePlus 6 crDroid from version 7.19 to 8.6. For a quick check what I checked is working fine, all data is preserved.

Thanks!
 
  • Wow
Reactions: Terminator.J
Thank you for your work!

I just updated on my OnePlus 6 crDroid from version 7.19 to 8.6. For a quick check what I checked is working fine, all data is preserved.

Thanks!
Oh holy crap, it worked?! That's... kind of amazing. I didn't expect it to work, ngl. Thanks for the report, and enjoy!
___

If you don't mind me asking; what GApps (if any) did you have before & which package did you flash as part of the update, what recovery or with built-in updater in Settings > System > Updater, etc etc.?
 
Last edited:
  • Like
Reactions: YousifG7

tomasz-c

Member
Sep 25, 2020
17
3
Oh holy crap, it worked?! That's... kind of amazing. I didn't expect it to work, ngl. Thanks for the report, and enjoy!
Yes, it worked :) And could you explain why it surprised you? Looks like it was more risky than I thought :) but I made copies beforehand, of course.
All the apps I checked work without any problem. Contacts, SMS, call history, photos and other data on storage and data of other apps are preserved.
I didn't remove the encryption before the update and my pin (sign) works fine.
In the previous post I forgot to add an important piece of information: I don't use GApps so I didn't test it.

At first I uploaded boot.img to both slots (because I forgot that in the description for the update it said to upload to one) but I guess it doesn't matter. I uploaded crDroidAndroid-12.1-20220709-enchilada-v8.6.zip to slot B, rebooted it booted after a long while (probably updating something) Android 12.1, when I saw that it worked I rebooted to recovery and uploaded it to slot A as well.
 
  • Like
Reactions: Terminator.J

tomasz-c

Member
Sep 25, 2020
17
3
If you don't mind me asking; what GApps (if any) did you have before & which package did you flash as part of the update, what recovery or with built-in updater in Settings > System > Updater, etc etc.?
I only now saw the questions in the second part of your post.
Basically, I did it as you stated in the instructions: "First time installation:" only without the "Factory reset / Wipe data" step and without installing GApps, because I don't use them.

  • To begin with, I updated to the latest version of crDroid 7.x (7.19)
  • Reboot phone to bootloader
  • fastboot flash boot_a crDroidAndroid-12.1-20220709-enchilada-v8.6_boot.img fastboot flash boot_b crDroidAndroid-12.1-20220709-enchilada-v8.6_boot.img
  • Reboot phone to bootloader.
  • Use vol +/- keys to select recovery mode & press power button to enter recovery.
  • On phone, in red menu recovery choose "Apply update" > "Apply from ADB" > "ADB sideload" & then from computer,
    adb sideload crDroidAndroid-12.1-20220709-enchilada-v8.6.zip
  • Reboot to system
When I saw that everything worked I rebooted to recovery and uploaded the zip image to the second slot via ADB Sideload.

I didn't have GApps before and didn't install them afterwards because I don't use them.
 
  • Love
Reactions: Terminator.J

tomasz-c

Member
Sep 25, 2020
17
3
I noticed that on the keyboard AOSP in Polish:
- swiping does not work,
- spell check does not work,
- word prompting does not work,

All these things worked on crDroid 7.19. Now they also work but in other popular languages, such as German or English.
I've tried deleting all AOSP keyboard app data and reconfiguring it from scratch, but that doesn't help.

Could I ask someone who has a clean installation to check this? Because without confirming it, it's unlikely to report the error.
 

runtosafety

Member
Apr 2, 2011
15
7
Thanks for your hard work.
ROM runs pretty well, although there are some minor yet annoying issues (don't know if they have been mentioned in the Telegram group but I'll list them here anyway).
  1. Sometimes the notification shade noticeably lags.
  2. Text selection menu (cut, copy, etc) doesn't appear after selecting, I have to long tap the selection again for it to appear. It happens for both input fields and usual text (e.g. on a web page)
  3. Gboard doesn't always save the buffer content into the clipboard manager. Same applies for the paste suggestions. Maybe I should install it as a system app? (I'm pretty sure I used it as a user app on crDroid 7 though)
  4. Apps seem to unload from RAM more aggressively than on crDroid 7.
  5. I guess they were removed in crDroid 8, but there used to be settings for weather on lock screen and smart charging (auto-disabling charging at XX%).
  6. In quick settings, when I tap mobile data, it takes very long for the animation to switch on/off while Wi-Fi is on (only the animation). Sometimes it will get stuck at on or off until I reopen the notification shade. Also if you quickly reopen the shade, the animation will change instantly without any lag. (All this is true regardless of the Mobile data always active developer setting)
 
Thanks for your hard work.
ROM runs pretty well, although there are some minor yet annoying issues (don't know if they have been mentioned in the Telegram group but I'll list them here anyway).
  1. Sometimes the notification shade noticeably lags.
  2. Text selection menu (cut, copy, etc) doesn't appear after selecting, I have to long tap the selection again for it to appear. It happens for both input fields and usual text (e.g. on a web page)
  3. Gboard doesn't always save the buffer content into the clipboard manager. Same applies for the paste suggestions. Maybe I should install it as a system app? (I'm pretty sure I used it as a user app on crDroid 7 though)
  4. Apps seem to unload from RAM more aggressively than on crDroid 7.
  5. I guess they were removed in crDroid 8, but there used to be settings for weather on lock screen and smart charging (auto-disabling charging at XX%).
  6. In quick settings, when I tap mobile data, it takes very long for the animation to switch on/off while Wi-Fi is on (only the animation). Sometimes it will get stuck at on or off until I reopen the notification shade. Also if you quickly reopen the shade, the animation will change instantly without any lag. (All this is true regardless of the Mobile data always active developer setting)
So, dirty little not-so-secret: I'm not really sure what I'm doing most of the time. There are a lot of things that seem to be regressions in Android 12, and I believe I've set up overlays correctly to configure crDroid-specific features. But... There are plenty of things where I don't know where to begin, and just assume that it's something that one of the actual core ROM dev team for crDroid (I am a device maintainer, not part of the core dev team) will eventually deal with, or it's just an issue with our specific device, or ... Whatever. Occasionally it's a thing that maybe I can dig up bug reports and logs and reproduce and figure out what's up and fix it.
Most of the things you mention are entirely beyond my control.
1. I believe you. Dunno what to do there; this will probably be an upstream ROM thing that needs to get fixed, but possibly relies on an overlay I need to fix. Usually things like this, I try and try to get to the bottom of it and pull my hair out and waste hours & hours and then it's something that was in the frameworks anyway and I don't know enough Java or Kotlin or C/C++ to have possibly been able to fix it, and then someone else fixes it and I could've just waited and it would've been fine in a month or two.
2. Yeah, I've had that too; seems to depend on app. Can you send me a log after it happens?
3. I'm using GBoard as a user app myself, although that's with MinMicroG, and haven't had problems with it. But I believe you. What GApps are you using?
4. Yeah, I noticed that too. There's work to do tuning things, but I'm not sure where to begin. I'm in a little over my head trying to keep the best of both worlds between just running with the Qualcomm QTI perfd kernel driver, and cutting over to using Google's libperfmgr with power hinting, and their corresponding low memory killer drivers (the "EdwinMoq" commits you may have heard mention of). It feels like I'm getting better performance/battery life right now, with trying to just use some of the "clean up and do some tuning without dropping QTI perfd" commits as an approach, but it might be overkill. If I remove all those things, then we basically end up functioning just like vanilla LineageOS on stock kernel for battery life/performance/smoothness. I'm open to suggestions there.
5. Yes, they were removed. Lock screen was reworked a lot in Android 12, as well as background services, and running the OmniJAWS service (which was intended for older Android versions anyway) apparently broke. Smart charging functionality can be brought back by using the Advanced Charging Control (acc) Magisk module. Best results seem to be by installing the last release of AccA (the graphical front-end), and then manually setting it to use acc module v2022.2.22.1 (newer "android 12 compatible" ones actually kinda fail to work), and then check for a charging switch that supports "battery idle mode" (and toggle on "prioritize battery idle mode").
6. Quick Settings and data handling in Android 12 is... man I don't even know. See point #1. It's not just our device though, from what I've seen scroll by in the crDroid maintainer chat.
 
Status update (11 August):
There's a lot of stuff I'd like to work on fine-tuning, because I might not be a pro AOSP dev, but I like having things feel polished.
LineageOS has been working on merging the August ASB, maybe they're done by now; and I know Neobuddy89 has been working on merging that into crDroid sources (it wasn't ready to build/test as of a few days ago, but probably fine now).
We finally hit summer weather here and it's been too hot for me to work in the back room where my build computer (and monitor setup) lives, and my wife took the summer off teaching and I've been busy working... And working on real life household projects, cleaning, repairs, dealing with the aftermath of my cousin-in-law passing away, taking care of the kids since school is out; lots of things.
I want to fine-tune things of course, but I'll have to save that for the August security patch or later.
I'll just throw 7.20 (whatever test version) and 8.7 test 2 out to OTA for now as the official releases, because "real artists ship"... And I can't sync crDroid sources now to keep working on July ASB releases because it would probably end up pulling in August changes anyway.
Definitely seems like they've been good enough to release for weeks, I've been daily driving and haven't run into regressions, and I can't let "it's not perfect yet!" prevent people from getting updates.
 

runtosafety

Member
Apr 2, 2011
15
7
So, dirty little not-so-secret: I'm not really sure what I'm doing most of the time. There are a lot of things that seem to be regressions in Android 12, and I believe I've set up overlays correctly to configure crDroid-specific features. But... There are plenty of things where I don't know where to begin, and just assume that it's something that one of the actual core ROM dev team for crDroid (I am a device maintainer, not part of the core dev team) will eventually deal with, or it's just an issue with our specific device, or ... Whatever. Occasionally it's a thing that maybe I can dig up bug reports and logs and reproduce and figure out what's up and fix it.
Most of the things you mention are entirely beyond my control.
1. I believe you. Dunno what to do there; this will probably be an upstream ROM thing that needs to get fixed, but possibly relies on an overlay I need to fix. Usually things like this, I try and try to get to the bottom of it and pull my hair out and waste hours & hours and then it's something that was in the frameworks anyway and I don't know enough Java or Kotlin or C/C++ to have possibly been able to fix it, and then someone else fixes it and I could've just waited and it would've been fine in a month or two.
2. Yeah, I've had that too; seems to depend on app. Can you send me a log after it happens?
3. I'm using GBoard as a user app myself, although that's with MinMicroG, and haven't had problems with it. But I believe you. What GApps are you using?
4. Yeah, I noticed that too. There's work to do tuning things, but I'm not sure where to begin. I'm in a little over my head trying to keep the best of both worlds between just running with the Qualcomm QTI perfd kernel driver, and cutting over to using Google's libperfmgr with power hinting, and their corresponding low memory killer drivers (the "EdwinMoq" commits you may have heard mention of). It feels like I'm getting better performance/battery life right now, with trying to just use some of the "clean up and do some tuning without dropping QTI perfd" commits as an approach, but it might be overkill. If I remove all those things, then we basically end up functioning just like vanilla LineageOS on stock kernel for battery life/performance/smoothness. I'm open to suggestions there.
5. Yes, they were removed. Lock screen was reworked a lot in Android 12, as well as background services, and running the OmniJAWS service (which was intended for older Android versions anyway) apparently broke. Smart charging functionality can be brought back by using the Advanced Charging Control (acc) Magisk module. Best results seem to be by installing the last release of AccA (the graphical front-end), and then manually setting it to use acc module v2022.2.22.1 (newer "android 12 compatible" ones actually kinda fail to work), and then check for a charging switch that supports "battery idle mode" (and toggle on "prioritize battery idle mode").
6. Quick Settings and data handling in Android 12 is... man I don't even know. See point #1. It's not just our device though, from what I've seen scroll by in the crDroid maintainer chat.
  1. Just updated, I'll see if 8.7 has fixed that.
  2. See the spoiler below for logs.
  3. NikGApps Basic. Yeah, I only noticed it's not a recommended option after installing (although that's what I used on crDroid 7 where I didn't have that issue).
Code:
08-16 22:44:05.021  2387  2387 D BatteryInfoBroadcast: onReceive: android.intent.action.BATTERY_CHANGED isPowerSaveMode: false
08-16 22:44:05.022  2387  2387 D BatteryDefenderNotification: isPlugged: true | isOverheated: false | defenderEnabled: false | isCharged: false
08-16 22:44:07.564  1035  1035 D vendor.qti.vibrator: Vibrator on for timeoutMs: 10
08-16 22:44:07.566  1035  4878 D vendor.qti.vibrator: Starting on on another thread
08-16 22:44:07.576  1035  4878 D vendor.qti.vibrator: Notifying on complete
08-16 22:44:07.577  1035  1035 D vendor.qti.vibrator: QTI Vibrator off
08-16 22:44:07.583 12805 12805 I cr_CompositorSurfaceMgr: Transitioning to surface with format: -1
08-16 22:44:07.592 12805 12805 D androidtc: Initializing SystemTextClassifier, type = System
08-16 22:44:07.593 12805 12805 W androidtc: TextClassifier called on main thread
08-16 22:44:07.595  3597  3597 I AiAiTextClassifier: onCreateTextClassificationSession = TextClassificationSessionId {8321aa96-9441-474e-9836-c6170d716612}
08-16 22:44:07.596  3597  3597 I AiAiTextClassifier: AiaiTextClassifierServiceConnector.onSuggestSelection
08-16 22:44:07.600 12805 12805 I cr_CompositorSurfaceMgr: surfaceCreated format: 0
08-16 22:44:07.667 12805 12805 I cr_CompositorSurfaceMgr: SurfaceState : detach from parent : -3
08-16 22:44:07.668 12805 12805 E cr_CompositorSurfaceMgr: surfaceDestroyed format : -3
08-16 22:44:09.149  1347  4506 D WindowManager: perform drag: [email protected] surface=Surface(name=drag surface)/@0x3a9d179 flags=100 data=ClipData { text/plain {T(8)} }
08-16 22:44:09.149  1347  4506 D WindowManager: registering drag input channel
08-16 22:44:09.171  1347  4506 D WindowManager: broadcasting DRAG_STARTED at (366.0, 1025.0)
08-16 22:44:09.171  1347  1731 W WindowManager: Unexpected ACTION_DOWN in drag layer
08-16 22:44:09.179  1035  1035 D vendor.qti.vibrator: Vibrator on for timeoutMs: 10
08-16 22:44:09.180  1035  4884 D vendor.qti.vibrator: Starting on on another thread
08-16 22:44:09.191  1035  4884 D vendor.qti.vibrator: Notifying on complete
08-16 22:44:09.192  1035  1035 D vendor.qti.vibrator: QTI Vibrator off
08-16 22:44:09.534  1347  1731 D WindowManager: Got UP on move channel; dropping at 366.0,1025.0
08-16 22:44:09.537  1347  1731 D WindowManager: sending DROP to Window{e1f7993 u0 com.vivaldi.browser.snapshot/com.google.android.apps.chrome.Main}
08-16 22:44:09.542 12805 12805 I ViewRootImpl[Main]: Reporting drop result: true
08-16 22:44:09.542  1347  8568 D WindowManager: Drag into new candidate view @ [email protected]
08-16 22:44:09.542  1347  8568 D WindowManager: Drop result=true reported by [email protected]
08-16 22:44:09.542  1347  8568 D WindowManager: unregistering drag input channel
08-16 22:44:09.542  1347  8568 D WindowManager: broadcasting DRAG_ENDED
08-16 22:44:09.542  1347  1731 D WindowManager: Drag ending; tearing down input channel
08-16 22:44:09.545  1347  1731 W InputManager-JNI: Input channel object 'drag (client)' was disposed without first being removed with the input manager!
08-16 22:44:10.880  3014  3086 I PhenotypeProcessReaper: Memory state is: 125
08-16 22:44:11.370  2387  2387 D PowerNotificationWarningsGoogleImpl: onReceive: android.intent.action.BATTERY_CHANGED
08-16 22:44:11.376  2387  2387 D BatteryInfoBroadcast: onReceive: android.intent.action.BATTERY_CHANGED isPowerSaveMode: false
08-16 22:44:11.376  2387  2387 D BatteryDefenderNotification: isPlugged: true | isOverheated: false | defenderEnabled: false | isCharged: false
08-16 22:44:11.768  4405  4485 E QMI_FW  : qmi_cci_get_ref: ref count increased 2
08-16 22:44:11.772  4405  4415 E QMI_FW  : qmi_cci_get_ref: ref count increased 2
08-16 22:44:11.792  3840 10026 I ConnectivityReport: signalStrength of #1 updated to 2
08-16 22:44:12.054  2387  2387 D PowerNotificationWarningsGoogleImpl: onReceive: android.intent.action.BATTERY_CHANGED
08-16 22:44:12.059  2387  2387 D BatteryInfoBroadcast: onReceive: android.intent.action.BATTERY_CHANGED isPowerSaveMode: false
08-16 22:44:12.059  2387  2387 D BatteryDefenderNotification: isPlugged: true | isOverheated: false | defenderEnabled: false | isCharged: false
 
  • Like
Reactions: Terminator.J
Everything blew up this summer in real life.
I finally pushed the 8.7 test 2 that I've been using as a daily driver personally and everyone in Telegram seems to have been more than happy with to OTA as the official July 2022 ASB release, sorry it's like a month late.
The July patch took a long time to merge, and August even longer, but it'll take me a while to release August unless I just skip working on my backlog of bugfix notes entirely.
 
  • Like
Reactions: Jelq
Okay, I took a mental health day to work on Android stuff. :D
First test builds of 8.8 will be going up tonight in the Telegram group if anyone wants to join & try them out!
Had to drop Camera2 (the basic AOSP camera) since that little 5MB makes the difference between MindTheGapps 12.1 arm64 & Magisk both being able to install and updater able to correctly process addon.d scripts when installing the zip, and a bootloop because it couldn't quiiiiite finish copying over the privapp permission XMLs to system/product/. Stupid tiny system partition...
No device-specific bugfixes yet in my trees, just testing with the most recent lineage changes & crDroid 8.8 sources.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 23
    NOTICE: crDroid 8.x (Android 12) is moving into maintenance-only release mode, and no new feature changes should be expected.
    I'll be merging monthly Android Security Bulletins from upstream as they're available, and pushing releases, but they'll be blind builds going forward.
    Please consider updating to crDroid 9.x (Android 13):
    crDroid 9.x XDA thread - OP 6/6T
    BE3pE0l.png

    *** Disclaimer ***​

    I am not responsible for any damage you cause to your device.
    I hope you like reading.
    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.

    Features:​

    General:​

    See our current feature list at our GitHub!

    Device-specific:​

    • OnePlus Camera & Gallery fully working (using APKs directly from OOS 11.1.2.2 or apkmirror.com with verifiable signatures; currently shipping OnePlus Camera v3.14.40 and OnePlus Gallery v4.0.297); including 60fps video recording in 1080p & 4K, watermark, depth effect, smart content detection, actually-working HDR, 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, 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 and mcdachpappe).

    Everything you never wanted to know about slots & A/B devices (but have been forced to find out):​

    • "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 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 "inactive" upon next reboot; causing it to attempt to boot from the formerly-inactive slot's boot partition.
    • 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 11.1.2.2, 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 11.1.2.2 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 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 this custom ROM over it. So please; update to OOS 11.1.2.2 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 has been described as a hot mess, the official releases for enchilada & fajita have not had good compatibility with Android 12 or newer (trouble with decrypting file-based encryption for userdata), and there are too many variations & unofficial TWRP-based recoveries for me to keep track of.
    • Meanwhile, the stock crDroid recovery (based on LineageOS) intentionally cannot decrypt userdata, and doesn't correctly process addon.d OTA survival scripts on A/B devices; 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 "proper" custom recovery until the Lineage team 1) implements userdata decryption so you can manage files in /data and install updates from internal storage, 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"), and 3) gets the updater to call backuptool correctly & process addon.d OTA survival scripts on A/B devices. 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.
    • The built-in recovery DOES support use of a USB thumb drive and will mount it in OTG mode, so any place in the instructions you see "adb sideload", you can instead copy all your things to a FAT32- or exFAT-formatted USB stick and then apply the update from there instead.

    Flashing Instructions:​

    Pre-installation prerequisites:​

    • 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 (11.1.2.2), 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 11.1.2.2 flashed to BOTH slots, follow the "Updating Firmware" instructions below. You may also want a utility like 7-zip in order to extract .tgz files under Windows.

    Updating Firmware:​

    • Reboot phone to bootloader (no USB cable connected until you've entered OEM bootloader).
    • 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 listed above.
    • Reboot to bootloader again (actually loads new bootloader contents 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 ('fastboot reboot').
    • 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 9.x from another ROM, continue with the first-time installation instructions below.

    First-time installation:​

    (when coming from any other ROM or stock OOS 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 "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 "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 "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.
    • ???
    • Profit!

    Update installation:​

    • 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.
    If you must flash from recovery, then be aware that the stock crDroid recovery does NOT process addon.d OTA survival scripts correctly on our A/B system-as-root device, so you'll need to do the following:
    • 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 (or use a USB drive with appropraite files copied to it and choose OTG as the update source instead).
    • 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.

    Please see post #2 for current boot.img files, information about Google apps & microG, release notes, installation notes, known issues, and lots of helpful links.
    Please see post #3 for information about bug reporting & troubleshooting.

    Sources:​

    ROM:​

    https://github.com/crdroidandroid

    Device trees:​

    https://github.com/crdroidandroid/android_device_oneplus_enchilada
    https://github.com/crdroidandroid/android_device_oneplus_fajita
    https://github.com/crdroidandroid/android_device_oneplus_sdm845-common
    https://github.com/crdroidandroid/android_hardware_oneplus/tree/12.1-op6

    Kernel:​

    https://github.com/crdroidandroid/android_kernel_oneplus_sdm845

    Vendor-specific:​

    https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_enchilada
    https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_fajita
    https://gitlab.com/crdroidandroid/proprietary_vendor_oneplus_sdm845-common
    https://gitlab.com/crdroidandroid/android_vendor_oneplus_apps
    https://github.com/Terminator-J/vendor_ih8sn

    Download:​

    ROM:​

    https://crdroid.net/enchilada/8
    https://crdroid.net/fajita/8

    Changelog:​

    https://crdroid.net/enchilada/8#changelog
    https://crdroid.net/fajita/8#changelog

    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)
    9

    General Notes:

    • Maintainer is only actively working on crDroid 9.x (Android 13) primarily and running that as daily driver. We'll be relying on community members in the Telegram group to verify any regressions/new issues in Android 12.1 builds, but will continue to release as new monthly security patches are merged in crDroid sources.
    • Yes this ROM supports package signature spoofing permission for microG compatibility out of the box (but will work without ANY GApps/microG implementation installed as well).
    • Requires OOS 11.1.2.2 firmware (last official release). You should consider using an Android 10 ROM if you want to continue using Android 10 firmware.
    • Tested against latest Magisk canary, works well.
    • No there won't be official builds with inline GApps; please don't ask. The dev team's policy is vanilla-only whenever possible (and it's very possible with our devices).

    Google Apps:​

    Maintainer doesn't often use Google Apps personally as daily driver, but here are some notes gathered from peoples' testing:
    • TL;DR: Use MindTheGapps.
      Otherwise, in general, try to go with the lightest weight package you can and don't replace the stock dialer/messaging apps (just download them from Play Store and set defaults).

    • Since we are LineageOS-based, here are the Lineage team's recommendations & reasoning:
      https://wiki.lineageos.org/gapps.html

    • MindTheGapps are recommended and considered the default supported configuration for either Android 11 or 12 (per the LineageOS wiki, linked above). Assistant works great out of the box.
      Note on Google Keyboard: If installed as a system app, GBoard will actually do on-device speech recognition when it doesn't have a network connection, so you might want to try adding the Nik Addon for Gboard on top of MTG, just to get on-device speech recognition as an input method (someone please test this out & report back?), but not required for regular usage and GBoard works perfectly well installed from the Play Store as a user app after first boot as well.
      MindTheGapps survives built-in System Updater OTA updates, works fine after doing manual update with built-in recovery, and passes SafetyNet.
      http://downloads.codefi.re/jdcteam/javelinanddart/gapps

    • NikGapps also seems to work in Android 12.1, although it has had some issues with clobbering overlays leading to system apps triggering the privacy indicators that shouldn't be doing that. Recommend using Core plus addons, rather than going heavier from the beginning (we don't have much space left in the system partition).
      You'll need Googlesearch (the actual "Google" app) and Velvet (Assistant pacakges), plus GBoard (gets offline speech recognition if installed to system) and either SetupWizard or PixelSetupWizard for the best voice-recognition & assistant experience.
      Not the recommended GApps package, but give it a shot if you like the customization options. Survives built-in System Updater OTA updates, might have issues with re-flashing during manual updates from built-in recovery (needs testing by some brave soul), passes SafetyNet afaik.
      https://nikgapps.com/downloads#downloads

    • Flame Gapps also seems to work well in Android 11 (haven't heard reports about Android 12.1 yet), although the "basic" package is a little heavier than Nik Core, at least it doesn't start replacing stock dialer & messages. Also survives OTA & passes SafetyNet, not sure about manual updates with built-in recovery.
      https://flamegapps.github.io/download.html

    • OpenGApps are not recommended, for reasons outlined in the LineageOS wiki link above.

    • BitGApps ... exist. No idea how that's going.
    Please report what worked for you, whether or not it survives updates when using the System Updater, whether or not it survives manual "dirty" update flashing via built-in recovery, and whether it passed SafetyNet, so I can keep this list updated.

    crDroid 8.14 - March 2023 ASB release notes/changelog:

    Changelog since v8.13 hotfix 1 release:
    • Merged February and March 2023 Android Security Bulletins & any changes from upstream LineageOS device/kernel/vendor trees (lineage-19.1 branch).
    • Whatever the ROM dev teams changed upstream in LineageOS and crDroid sources (not much? they're busy with Android 13).
    • Other misc fixes ... probably.

    Installation notes:​

    • In case of bootloop (boot animation stuck for longer than about 2 minutes and never gets to lock screen), reboot to recovery and manually flash the ROM zip either via ADB sideload from computer, or from a FAT32-formatted USB thumb drive via OTG, then reboot to recovery again, and re-flash your same Google Apps/microG/Magisk/whatever install zips (again via ADB sideload or USB OTG), and reboot system. This *should* take care of any lingering errors with old things getting stuck in your /system/addon.d/ directory that might be trying to preserve old privileged system apps without privileged permissions (which is what causes those boot loops in the first place).
    • The built-in OTA updater in Settings > System > Updater goes a lot faster if you go into Updater preferences and toggle on "prioritize updater process", and make sure the screen stays on by using the Caffeine QS tile, or "never sleep while charging" toggle in Developer Options, or changing your Display timeout to 30 minutes.
    • If you experience issues with OnePlusCamera & OnePlusGallery after updating from an old version, first get App Info and clear storage & cache for both. You might have luck with "update" installing the same apk version in-place (it will ask if you want to update the app, even though it's the same version). I used OP Camera v3.14.40, which is available from here: https://www.apkmirror.com/apk/onepl.../oneplus-camera-3-14-40-android-apk-download/ and OP Gallery v4.0.297, available from here: https://www.apkmirror.com/apk/onepl...eplus-gallery-4-0-297-2-android-apk-download/. Reports are that it usually works just fine updating from official 8.7, but here are some troubleshooting steps for just-in-case.

    Known issues:

    • The usual LineageOS Android 12 things (mostly that big ugly blank spot at the top after reboot before unlocking).
    • (fajita-only) The "Pocket detection" toggle in crDroid Settings > Miscellaneous will interfere with "Screen off UDFPS" (crDroid Settings > Lock screen > UDFPS customization) and "Prevent accidental wakeup" (Display settings). If you use it, turn off the others, or you might run into the screen-won't-turn-on issue. Personally, I was just dealing with having to press the power button a few extra times, because disabling "Pocket detection" ended up with me almost calling emergency services several times a day.
      Thankfully this seems to be fixed in crDroid 9 (Android 13), so I definitely recommend upgrading once that's released.
    • Maintainer is busy af in real life and takes forever to get releases out.

    Helpful links:

    8
    8.7 testing releases available in the OP 6/6T TG channel if anyone is feeling adventurous!
    7
    Okay, I took a mental health day to work on Android stuff. :D
    First test builds of 8.8 will be going up tonight in the Telegram group if anyone wants to join & try them out!
    Had to drop Camera2 (the basic AOSP camera) since that little 5MB makes the difference between MindTheGapps 12.1 arm64 & Magisk both being able to install and updater able to correctly process addon.d scripts when installing the zip, and a bootloop because it couldn't quiiiiite finish copying over the privapp permission XMLs to system/product/. Stupid tiny system partition...
    No device-specific bugfixes yet in my trees, just testing with the most recent lineage changes & crDroid 8.8 sources.
    6
    After a week of usage, everything rock solid. I have noticed a daily message offering an update to Android 13, what probably is an issue with upstream crdroid. Other than that, everything running smoothly.

    I am surprised how few people are paying attention to this thread. Thing is, you hardly find this thread in xda when searching for rooms. Even searching in Google for "xda crdroid oneplus 6" will point you to less relevant threads. I usually have to find it through crdroid page, which I guess is not how people should find one of the best ROMS for enchilada out there. Any way to improve the exposure?