[ROM][12.1][Official]crDroid Android[v8.7]

Search This thread
BE3pE0l.png

*** 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.

Features:​

General:​

https://github.com/crdroidandroid/crdroid_features/blob/12.1/README.mkdn

Device-specific:​

  • OnePlus Camera & Gallery fully working (using APKS extracted directly from OOS 11.1.2.2); 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 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 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 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 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.

Flashing Instructions:​

Pre-installation:​

  • 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.

Updating Firmware:​

  • 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 ('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 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.
  • ???
  • 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.
  • 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.
Please see post #2 for current boot.img files, release notes, & known issues.

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_op6
https://gitlab.com/crdroidandroid/android_vendor_oneplus_apps

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:

Notes:

  • Yes it 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 use Google Apps personally as daily driver, but here are some notes gathered from peoples' testing:
  • 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:
    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 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.
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.7 - July 2022 ASB release notes/changelog:

Changelog since 8.6
I know it took a while. Everything blew up this summer.
  • Merged July 2022 ASB from upstream.
  • Fixed cutout antialiasing in enchilada.
  • Added "NoCutoutOverlay" to fajita in order to allow for "Hide" mode in Developer Options > Display cutout.
  • Blurred wallpaper for Recents background in default launcher now; long-press in blank area of home screen & choose "Settings" to test new options. Change the background opacity if you're having trouble with text legibility (dark text on dark wallpaper with light mode enabled, for example).
  • Probably more but I don't remember. Been using it as a daily driver for nearly a month now and just needed time to get around to pushing to the OTA server.

Known issues:

  • For single-press "Screen-off UDFPS" to work on fajita, you need something else enabled that keeps the screen digitizer awake (like turning on DT2W or set up a screen-off gesture).
  • Basically everything that's still funky in upstream LineageOS:
    • No audio passed to remote display when casting via wifi display/miracast.
    • Enchilada still doesn't properly display the "Battery estimate" in the statusbar when pulling down the QS/Notification shade.
    • There's ugly blank space at the top of the screen after rebooting before first unlock. After first unlock it's fine.
    • Up-arrow screen-off gesture doesn't work (something else is eating that keycode); all the rest work with the caveat that left/right swipe gestures don't work unless BOTH directions have an action assigned, and then they both work.
    • The NFC stack will crash if something tries to *read* data from the phone. So NFC payments via Google Wallet/Pay/whatever-it-is-this-week should work, but Android Beam/Nearby Sharing will fail and might require a reboot to enable NFC again.
  • Maintainer is busy af in real life and takes forever to get releases out.

Helpful links:

 

Attachments

  • crDroidAndroid-12.1-20220725-enchilada-v8.7_boot.img
    64 MB · Views: 30
  • crDroidAndroid-12.1-20220725-fajita-v8.7_boot.img
    64 MB · Views: 12
Last edited:

LOGS OR IT DIDN'T HAPPEN​

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

Other Notes​

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

To be considered a "supported configuration", I need for folks to do a clean installation, 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.

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.

*UPDATE* -- Apparently it works, at least if you don't use GApps/microG at all. I haven't had someone come to me with a success story using Google Apps yet, and you're probably still better off with a fresh start, but in a pinch it seems to at least be possible. Thanks to @tomasz-c for their testing!

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
13
3
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
13
3
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.
  • 5
    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?
    3
    Welp, I accidentally made it work installing them to /vendor/priv-app/ so... I guess we go with door number three.
    3
    Bro, the only reason i switched to this ROM is because you made one plus camera working. I don't get what you mean that Google camera is better in any way, it was absolutely unstable for me, slow and with worse picture quality, with most important features not working, like 60 fps video recording (bro, that's like the most important feature ever and i don't want to say a word more, i was dreaming of it before that was even a thing) portrait mode, slo-mo (that's seem to be still broken?) I would rather go to stock, if this haven't been solved. So thank you for bringing that and believe me, for me it means a lot, thanks to this i am not thinking about changing the phone again.
    I know 60fps video recording doesn't work correctly in any of the GCam mods I've played with, but if you want just about everything else working better (especially with HDR+ enabled), and both frame rates for slow-mo functioning WITH sound out-of-the-box, try out the old DMGC v4.5 based on GCam 7.3; it works pretty darn well.
    Or even MJL Minilux (7.3-based) with Juan-All XML (no postprocessing) for photography, video be damned.
    3
    Okay, hi everyone! So I'll probably edit this post later once I've got more time, but quick status update:
    - Still busy AF in real life
    - 8.8 will be out soon, and moves OnePlus Camera & Gallery to vendor partition so there should be room for larger GApps installs (for clean install).
    - I'll make a "OP Camera" troubleshooting post here for what to do if it's behaving funky for you after updating, but short version is to clear app storage & cache for OP Camera & OP Gallery, and possibly download the apks directly and do an "update this app" install using the same version, and then it'll get its head on straight and work properly.
    - I know 8.9 is already out for other devices, I've just been way too busy and want to push 8.8 official. It's been release-worthy for a long time and I've been daily driving it, it just takes time to go through the checklist and especially write proper release notes/make sure everything's still current in the first posts of the thread.
    - I did a test build of crDroid 9.0 (Android 13), and it 1) compiled eventually, 2) booted, and 3) no network access for any apps. That wasa a month ago. It's probably all fixed in upstream sources now, and I'll be shifting attention to that soon. But let's get Android 12 updates that are already ready pushed to official, hey?
    1
    Hey folks, I'm having trouble with the 8.8 update test builds.

    The "system" partition is getting too full with 8.8 for some reason, and it seems to be causing bootloops for some people when they try to update to it (either with Settings > System > Updater while booted into system, or while adb sideload flashing from recovery).

    I've run into this on my testing fajita when trying to flash or update the ROM, MindTheGapps (12.1-arm64-20220605_112439 build), and Magisk (25203 canary build). Unfortunately, until we switch to retrofitting dynamic partitions, this means that just about the only way to reliably cut down on the used space in the system partition is to do something about the included OnePlusCamera apks (Camera, CameraService, and Gallery specifically).

    There are two good ways to do that, and I've tested them both. Either...
    1. Ship an older version of the OnePlusCamera app, which is about 40MB smaller, but then would require manually re-installing the apk file to remain at the current version, or...
    2. Remove all three prebuilt apks from the ROM zip, and provide a magisk module instead for those who actually use them, since Google Camera is better in almost every way except for 60fps video recording.
    Option 1 (ship older version of the OPCam app):
    • Pros:
      • Easier to keep things mostly the same for people who don't read release notes or documentation
    • Cons:
      • Doesn't save as much space in the system partition
      • Older version of camera app probably has even worse image quality
      • Requires downloading & reinstalling an apk file just to remain at the current version
    Option 2 (drop apps from ROM zip and use Magisk module to overlay them back into system_ext/priv-app/):
    • Pros:
      • Saves more space in system partition, which is the goal
      • Stays on latest versions of apps
      • No more useless OP camera/gallery apps for those that hate them
    • Cons:
      • Just updating the ROM without reading release notes/instructions will result in reduced functionality
      • Requires manually downloading/copying three apks to your phone & in-place update installation if you don't install the module before the 8.8 ROM update in order to make Android happy again & prevent FCing
      • I guess I can't brag about shipping fully-functional OnePlusCamera built-in any longer... although using the module, it still retains the same 100% functionality as in 8.6 & 8.7 versions
    • Other
      • Requires Magisk (I guess this is a con if you don't want to install Magisk; I always use it anyway for hostfile-based ad blocking, but some people are strange and dislike the idea)
    So! Who wants the "ship older version" option? React with a "Haha" 🤣. Prefer the Magisk module approach? React with a "Love" 😍
    Feel free to reply & discuss, or hop in the TG group.
  • 18
    BE3pE0l.png

    *** 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.

    Features:​

    General:​

    https://github.com/crdroidandroid/crdroid_features/blob/12.1/README.mkdn

    Device-specific:​

    • OnePlus Camera & Gallery fully working (using APKS extracted directly from OOS 11.1.2.2); 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 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 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 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 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.

    Flashing Instructions:​

    Pre-installation:​

    • 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.

    Updating Firmware:​

    • 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 ('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 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.
    • ???
    • 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.
    • 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.
    Please see post #2 for current boot.img files, release notes, & known issues.

    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_op6
    https://gitlab.com/crdroidandroid/android_vendor_oneplus_apps

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

    Notes:

    • Yes it 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 use Google Apps personally as daily driver, but here are some notes gathered from peoples' testing:
    • 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:
      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 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.
    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.7 - July 2022 ASB release notes/changelog:

    Changelog since 8.6
    I know it took a while. Everything blew up this summer.
    • Merged July 2022 ASB from upstream.
    • Fixed cutout antialiasing in enchilada.
    • Added "NoCutoutOverlay" to fajita in order to allow for "Hide" mode in Developer Options > Display cutout.
    • Blurred wallpaper for Recents background in default launcher now; long-press in blank area of home screen & choose "Settings" to test new options. Change the background opacity if you're having trouble with text legibility (dark text on dark wallpaper with light mode enabled, for example).
    • Probably more but I don't remember. Been using it as a daily driver for nearly a month now and just needed time to get around to pushing to the OTA server.

    Known issues:

    • For single-press "Screen-off UDFPS" to work on fajita, you need something else enabled that keeps the screen digitizer awake (like turning on DT2W or set up a screen-off gesture).
    • Basically everything that's still funky in upstream LineageOS:
      • No audio passed to remote display when casting via wifi display/miracast.
      • Enchilada still doesn't properly display the "Battery estimate" in the statusbar when pulling down the QS/Notification shade.
      • There's ugly blank space at the top of the screen after rebooting before first unlock. After first unlock it's fine.
      • Up-arrow screen-off gesture doesn't work (something else is eating that keycode); all the rest work with the caveat that left/right swipe gestures don't work unless BOTH directions have an action assigned, and then they both work.
      • The NFC stack will crash if something tries to *read* data from the phone. So NFC payments via Google Wallet/Pay/whatever-it-is-this-week should work, but Android Beam/Nearby Sharing will fail and might require a reboot to enable NFC again.
    • 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.
    5
    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?