[ROM][13.0_r16][Official]crDroid Android[v9.0][December 2022 ASB]

Search This thread
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, 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).
  • Upstreamed updates from 4.9-q branch of Android common kernel for 4.9 LTS (merges courtesy of BananaFunction).

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-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 8.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 non-dynamic, non-virtual 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/13.0-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/9
https://crdroid.net/fajita/9

Changelog:​

https://crdroid.net/enchilada/9#changelog
https://crdroid.net/fajita/9#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:

  • 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 (13.0 arm64).
    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 12 or 13 (per the LineageOS wiki, linked above). Assistant works great out of the box.
    Note on Google Keyboard: It used to only allow for on-device recognition if installed as a system app (as part of a Google apps package, before first boot). This no longer seems to be the case, so don't bother trying to install it as a Nik add-on on top of MindTheGapps. It works great straight from the Play Store.
    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 13.0, although it has historically 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.
    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 I have no idea about in Android 13.0.
    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 9.0 - December 2022 ASB release notes/changelog:

Changelog since v9.0-November release:
  • Merged December ASB & changes from upstream LineageOS device/kernel/vendor trees.
  • Google updated everything in AOSP 13.0_r16 with a rebased... base with over 10K commits difference than November 13.0_r13; so LineageOS had to essentially bring up Android 13 all over again, and we had to redo our customizations all over again on top of that. Can't just git merge.
  • Bug with NFC stack crashing when device entered deep sleep is now squashed; things like Google Pay/Wallet lagging out or QS tiles being non-responsive for several seconds (when NFC tile was visible) on wakeup should be fixed. Thanks to LineageOS team, and whoever it was that filed the bug-report properly.
  • Bug with stuttering HD audio with some bluetooth receiver chipsets should also be fixed (thanks again to LineageOS team).
  • Updated DeviceExtras to 7.2 (based on AB's current implementation in hardware/oneplus/ over at Evolution-X), re-added HBM/AutoHBM in DeviceExtras because I wanted the easter egg back. It's technically in two places now, you don't have to enable it in DeviceExtras if you're happy configuring it in LiveDisplay, but this way it's adjustable.
  • Kernel updated to 4.9.336 with changes merged from 4.9 LTS (thanks to BananaFunction for figuring out the merges from AOSP 4.9-y, LineageOS android_kernel_qcom_sdm845, and others).
  • Since I grabbed all the "use power efficient workqueues" commits from MCD kernel already, I actually added the toggle to DeviceExtras to allow you to enable the functionality. Probably saves some power, possibly while actually improving performance; try it out.
  • Updated min/max/default values for Vibration sliders in DeviceExtras. Now you can just drag it all the way to zero to turn off. Huzzah!
  • Import custom sdm845-specific vibrator AIDL from SyberiaOS OP6 12.0 branch (based on earlier qcom opensource version, but with modifications from Xiaomi sdm845 who also use the same led-qpnp-haptic.c vibration driver that we do), update ndk for Android 13. Seems to work for all effect types (even if they don't feel very different from each other), including "TICK", which means the "haptic tick on back gesture" preference actually does something, yay! DeviceExtras intensity sliders still seem to work to control different vibration types, so this might be the best combination going forward.
  • Deliberately, maliciously ruined everyone's life and removed Google Camera & Aperture from list of packages allowed to use the second rear camera sensor BECAUSE IT'S ABSOLUTE ****E. If this is truly a problem, I can recommend a good therapist.
  • Updated APNs to include "ia" type for any apn with "default" type that didn't already include "ia". I guess Android 13 needs this, and should help solve connectivity issues for some folks.
  • Updated statusbar/corner spacing & padding. You're going to hate it. I hate it too. There were changes to how burn-in protection worked, and some calculations for padding/insets in the statusbar views/viewports. Default values in framework (especially pertaining to some customization features) are fighting themselves & it looks dumb. This is the best workaround at the moment, since burn-in protection is basically non-optional for OLED panels. Trust me when I say I'll keep working on it for future releases; but the ROM team have already merged 9.1/January ASB and I need to stick a pin in this release for now.
  • Hope you all had Happy Holidays, Joyous Solstice, Chag Channukah Sameach, God Jule, Happy Kwanzaa, Merry Christmas, and wish you a Happy New Year!

Known issues:

  • Statusbar/corner default padding looks uglier now. I know, I'm working on it. If you leave the screen on for more than 10 minutes you'll see everything start moving around (both inward toward notch AND outward toward edges); it was getting cut off when it would move outward before. Until they fix framework java for non-AOD burn-in protection to make sure it doesn't go too far wide, it's gonna probably have to stay like this.
  • Some custom launchers don't work right still, probably. Android 13 growing pains!
  • Smart charging doesn't always stop exactly at the specified percentage when using a DASH charger or when device is in deep sleep.
  • Custom fonts don't apply properly to 3rd party apps. It's in the GitHub issue tracker already.
  • Some carriers seem to have trouble with mobile data enabling; not sure why exactly. Hopefully it's fixed in 9.1; this shouldn't be a regression compared to 9.0-November at least.
  • Maintainer is busy af in real life and takes forever to get releases out.
  • You tell me, with logs!

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're installing MinMicroG instead of Google Apps, then before ADB sideloading the zip, from built-in recovery on the phone, go to Advanced > and choose "Mount/Unmount System" first. Then go back to "Apply update" and proceed with ADB sideloading as normal to install.

Other helpful links:​

 

Attachments

  • crDroidAndroid-13.0-20230112-enchilada-v9.0_boot.img
    64 MB · Views: 45
  • crDroidAndroid-13.0-20230112-fajita-v9.0_boot.img
    64 MB · Views: 30
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 8.x:​

To be considered a "supported configuration", I need for folks to do a clean installation when jumping from Android 12 to 13, rather than trying to migrate from crDroid 8.x to 9.x. 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 an Android 13 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 wifi or mobile data under Android 13, 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 "Private DNS" and choose a different private DNS provider or simply turn the feature off.
  • Go into Settings > Network & internet, scroll down to "Connectivity check" and turn it off (in case connections to Google are being filtered at the network level).
  • Go into Settings > Network & internet > Internet, tap the gear icon next to the wifi network you're trying to connect to, and change Privacy to "Use device MAC" (some networks actively reject spoofed MAC addresses).
  • 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:
Aaaand we're official!
Just in time to merge Android 13.0_r16 qpr1, which is an enormous rebase of android/frameworks/base/ with over 10K commits different, so Neobuddy89 and the rest of the team have been busy trying to redo all our customization/features on top of THAT for a week now. So everything that was finally working is probably broken again, sweeeeeet! 😅
 

runtosafety

Member
Apr 2, 2011
15
7
Thanks again for your work.

I know dirty flash isn't the recommended way, but this worked for me:
OTA 8.10 -> 8.11 -> fastboot flash boot.img to both slots (just in case something's changed since I flashed it the last time) -> reboot to recovery -> dirty flash 9.0 -> flash NikGApps Basic (not the recommended GApps, I know, but I found out too late to switch) - > flash Magisk -> reboot to system.
Last time when I tried to dirty flash 7 to 8, I got a bootloop since I was one version behind unlike this guy, so I figured waiting for the latest 8 release might be the right thing.

So far, so good. System feels much more responsive now and all the minor issues I encountered in crDroid 8 are gone (not sure about RAM management yet, I'll see).

I had a few issues initially, but everything's resolved now:
  1. I had a "Settings Services not responding" pop-up after the first boot, which I fixed by clearing the app's storage
  2. My 6T randomly became completely unresponsive after locking a screen (with a double-tap on the default launcher, I think). I've encountered a similar issue on crDroid 8 several times before, but I think that had something to do with the pocket mode. When it happened on 8, I'd have to force reboot with hardware buttons. This time however long pressing the power button showed me the power menu (although it looked like a standard Android one, with a white background and only 3 options, unlike the crDroid one). This has only happened once and hopefully never will again
My only pet peeves (probably upstream issues and not out device-specific) are:
  1. Weather service doesn't seem to be working (neither OpenWeatherMap nor MET Norway, neither on lockscreen nor the OmniJaws widget). Do I need a custom OWM key?
  2. Mobile icon used to hide when data was off. Now there's a permanent data disabled indicator, which is kinda annoying but I guess I'll get used to it 😅
 

Adnan Hussaini

New member
Nov 10, 2021
3
2
Aaaand we're official!
Just in time to merge Android 13.0_r16 qpr1, which is an enormous rebase of android/frameworks/base/ with over 10K commits different, so Neobuddy89 and the rest of the team have been busy trying to redo all our customization/features on top of THAT for a week now. So everything that was finally working is probably broken again, sweeeeeet! 😅
Bluetooth keeps crashing.Any One Experiencing the same?
 
  • Like
Reactions: Terminator.J

Awner

New member
Jan 31, 2019
3
3
For some reason, the GPS doesn't work (in google maps for example). Gave all of the apps location access and made sure to turn on the "use location" toggle. All location services are turned on as well (e.g. google location accuracy). However, location data does work in the metadata of pictures taken by the camera app.
 
  • Like
Reactions: Terminator.J
For some reason, the GPS doesn't work (in google maps for example). Gave all of the apps location access and made sure to turn on the "use location" toggle. All location services are turned on as well (e.g. google location accuracy). However, location data does work in the metadata of pictures taken by the camera app.
Depending on how you installed, or Google apps package, or if you did something like clearing storage for Play Store or Play Services, you might need to go into Settings > Apps > "Show all ___ apps" > 3-dot menu > "Show system", find Google Play Services and Google Play Store and re-grant them permissions again (like location).

Never had a problem with GPS working while driving in Waze regularly, or recording locatoin in photos in in OP Camera, Lineage Aperture (the other "camera" app with darker grey icon).

Please see post #3 for details on how to send me a bug report & what kind of logs/information I'll need.
 
  • Like
Reactions: Awner
Thanks again for your work.

I know dirty flash isn't the recommended way, but this worked for me:
OTA 8.10 -> 8.11 -> fastboot flash boot.img to both slots (just in case something's changed since I flashed it the last time) -> reboot to recovery -> dirty flash 9.0 -> flash NikGApps Basic (not the recommended GApps, I know, but I found out too late to switch) - > flash Magisk -> reboot to system.
Last time when I tried to dirty flash 7 to 8, I got a bootloop since I was one version behind unlike this guy, so I figured waiting for the latest 8 release might be the right thing.

So far, so good. System feels much more responsive now and all the minor issues I encountered in crDroid 8 are gone (not sure about RAM management yet, I'll see).

I had a few issues initially, but everything's resolved now:
  1. I had a "Settings Services not responding" pop-up after the first boot, which I fixed by clearing the app's storage
  2. My 6T randomly became completely unresponsive after locking a screen (with a double-tap on the default launcher, I think). I've encountered a similar issue on crDroid 8 several times before, but I think that had something to do with the pocket mode. When it happened on 8, I'd have to force reboot with hardware buttons. This time however long pressing the power button showed me the power menu (although it looked like a standard Android one, with a white background and only 3 options, unlike the crDroid one). This has only happened once and hopefully never will again
My only pet peeves (probably upstream issues and not out device-specific) are:
  1. Weather service doesn't seem to be working (neither OpenWeatherMap nor MET Norway, neither on lockscreen nor the OmniJaws widget). Do I need a custom OWM key?
  2. Mobile icon used to hide when data was off. Now there's a permanent data disabled indicator, which is kinda annoying but I guess I'll get used to it 😅
There's probably permissions issues going on there. You really should plan on backing up your stuff & doing a factory reset (which will wipe internal storage, sorry) or it's just going to have little lingering issues like this that I can't help with.
Pet peeves:
1. The weather service works flawlessly both with MET Norway & OWM even without a custom API key; came right up for me. Likely needs a clean flash/factory reset to work correctly.
2. Not sure what combination of settings caused that bug to happen, but mobile signal strength should be visible even when data is disabled, since calls & SMS still exist. But yeah; lots of UI-related stuff is likely different. Every major release the ROM dev team has to figure out what will actually keep working or not, and tried to bring features back in or drop them because it's buggy now or causes problems elesewhere or so forth. Honestly the statusbar icon customization options were kind of a mess in Android 12 and it does seem like it's more reliable & consistent now than it was before.
But I understand you miss your favorite setup; I get it. Sorry friend.
 
Meanwhile, having synced Android 13.0_r16 (QPR1/December ASB), the dev team had to redo all our stack of modifications & customizations on top of it again (for the git-savvy, it's because it's a rebase of all the AOSP repos; more than 10K commits difference, can't just merge in monthly changes).
They essentially had to do Android 13 all over again, and now all of us maintainers are checking to see what broke. 😅

It seems not entirely broken though, so I'll probably start putting up December ASB testing builds in the TG group soon!
 

Awner

New member
Jan 31, 2019
3
3
Depending on how you installed, or Google apps package, or if you did something like clearing storage for Play Store or Play Services, you might need to go into Settings > Apps > "Show all ___ apps" > 3-dot menu > "Show system", find Google Play Services and Google Play Store and re-grant them permissions again (like location).

Never had a problem with GPS working while driving in Waze regularly, or recording locatoin in photos in in OP Camera, Lineage Aperture (the other "camera" app with darker grey icon).

Please see post #3 for details on how to send me a bug report & what kind of logs/information I'll need.
Hi first of all thanks for making this amazing rom! I fixed the issue by formatting my data again. I think everything works now. Really love the device-specific additions that are otherwise missing in other roms. Thank you :)
 
  • Like
Reactions: Terminator.J
Dec 8, 2014
20
5
OnePlus 6
Hey there's a weird bug that's been going on and it has been happening with all the android 13 ROMs I have been using. The NFC just quits randomly and blanks out the menu in settings until reboot.
 

Attachments

  • NFC-Fail.txt
    8.3 KB · Views: 14
  • Screenshot_20221221-180631_Settings~2.png
    Screenshot_20221221-180631_Settings~2.png
    17.3 KB · Views: 49
  • Like
Reactions: Terminator.J

imokpd

New member
Dec 23, 2022
1
0
Nice work,It suit me well,But i can't get OTA updates,I gess it might be a network issue,so I wonder the OTA adress to find out what's wrong,can some one help?
 

Attachments

  • Screenshot_20221223-194312_系统更新[1].png
    Screenshot_20221223-194312_系统更新[1].png
    79.2 KB · Views: 60

Top Liked Posts

  • There are no posts matching your filters.
  • 2
    Does anyone know if I can flash CrDroid using the mentioned clean flashing instructions over Evolution X? I ask because the flashing instructions for Evolution X is quite different and maybe changes too much of the phone, see https://gist.github.com/AnierinBliss/dfae19e6c21fde039f8edceeda4bc576
    Evox is retrofit partition, but crdroid is default A/B partition scheme so you have to use msm tool to go back to normal partition scheme after that you can flash crdroid, this is my understanding when i used evox rom, because of retrofit partition it is not possible at all. I hope you can understand my poor English well enough to clear your doubt.
    2
    crDroid v9.0-December has been released to OTA, go get it!
    TONS of changes other than the name, check post #2.
    1
    Is this ROM implementing the necessary changes for getting unlimited Google photos backup?
    It does!
    Screenshot_20230105-142222_Settings.png
    1
    Yep, it has. NFC dies when the screen goes off & device enters deep sleep.
    If you actually USE it regularly & prefer to leave it on, then the best thing is probably to just remove the QS Tile from being visible so it doesn't make the rest of the QS tiles unresponsive for 5-8 seconds.
    For what it's worth, I tried a couple test builds bringing back the prebuilt NFC stack from 12.1 (lineage-19.1 base), which only made things worse, and half the folks who tried it couldn't even switch NFC on in that state (never had that problem personally).
    So we're likely all waiting on the fine folks upstream at LineageOS to figure out how to un-fsck NFC on enchilada & fajita, if that's even possible. At least Google Wallet/Pay still seem to work for contactless payements, yay.
    So I may have figured out a fix for the NFC. Ive been able to get at least a two days without NFC crashing and dissapearing from settings. It involves modifying the /system/etc/libnfc-nfc.conf file. I modified the two green highlighted options to the noted default settings.

    Originally they were set to what the picture with red highlight show and they caused issues. However I believe it's the screen off power state being set wrong that may have cause the actual issue. Someone with the same problem I had could probably confirm by only change the power state option and seeing if that fixes it.
    1
    Thank you very much, that was perfectly understandable 😎. I'll go thtough MSM before I flash CrDroid.
    I don't think you actually need to use MSMTool, since the actual GPT layout doesn't change when switching to dynamic partition retrofit.

    I actually made some test builds with the DPR patches (we're both talking with jabashque, one of the Lineage devs for enchilada/fajita, who likes to play with stuff like that, or setting zram to use 100% of system ram and let God figure it out, or use DPR and then set system & vendor to be squashfs ramdisk images on top of it... good times), but it didn't seem like it was worth it for us, for a couple reasons:

    1) The whole point of retrofitting dynamic partitions is to share free space, if one of three filesystems needs more room for putting more stuff in. The way it works is that the three GPT partitions per slot (currently system, odm, and vendor) are now treated as a raw storage pool, and there are "soft" filesystems that span across those three chunks of storage, than can be expanded as needed.

    2) crDroid doesn't ship with GApps inline, so that people who want to go Google-free have the option... but you can't ship a read-only system partition filesystem (like squashfs, or erofs like EvoX) if you need to be able to flash a GApps zip.

    3) There's plenty of room to install the recommended GApps (MindTheGapps) in the available system partition space as-is.

    4) For now anyway, OnePlus Camera & Gallery seem to work okay being compiled into /vendor/priv-app/ with a couple sepolicy hacks, so really, there's no 3rd-party bloat in the system partition to try and work around.
    Should be okay with just the clean flash instructions.

    It still might not be a bad idea to switch to retrofitting dynamic partitions for crDroid as well, since that means I could put OP Camera & Gallery back in /system/priv-app/ and the sepolicy & permissions for it would be a lot less hacky. But it works fine for Android 13 at the moment, and I don't want to waste hours & hours redoing it again, just to make the initial installation procedure more difficult.

    (On the other hand, it might cut down on unneccessary questions from people who can't be bothered to follow the installation instructions... and people insisting on trying to use TWRP for installing from recovery, muahaha :devilish: )
  • 12
    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, 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).
    • Upstreamed updates from 4.9-q branch of Android common kernel for 4.9 LTS (merges courtesy of BananaFunction).

    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-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 8.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 non-dynamic, non-virtual 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/13.0-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/9
    https://crdroid.net/fajita/9

    Changelog:​

    https://crdroid.net/enchilada/9#changelog
    https://crdroid.net/fajita/9#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)
    12

    General Notes:

    • 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 (13.0 arm64).
      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 12 or 13 (per the LineageOS wiki, linked above). Assistant works great out of the box.
      Note on Google Keyboard: It used to only allow for on-device recognition if installed as a system app (as part of a Google apps package, before first boot). This no longer seems to be the case, so don't bother trying to install it as a Nik add-on on top of MindTheGapps. It works great straight from the Play Store.
      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 13.0, although it has historically 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.
      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 I have no idea about in Android 13.0.
      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 9.0 - December 2022 ASB release notes/changelog:

    Changelog since v9.0-November release:
    • Merged December ASB & changes from upstream LineageOS device/kernel/vendor trees.
    • Google updated everything in AOSP 13.0_r16 with a rebased... base with over 10K commits difference than November 13.0_r13; so LineageOS had to essentially bring up Android 13 all over again, and we had to redo our customizations all over again on top of that. Can't just git merge.
    • Bug with NFC stack crashing when device entered deep sleep is now squashed; things like Google Pay/Wallet lagging out or QS tiles being non-responsive for several seconds (when NFC tile was visible) on wakeup should be fixed. Thanks to LineageOS team, and whoever it was that filed the bug-report properly.
    • Bug with stuttering HD audio with some bluetooth receiver chipsets should also be fixed (thanks again to LineageOS team).
    • Updated DeviceExtras to 7.2 (based on AB's current implementation in hardware/oneplus/ over at Evolution-X), re-added HBM/AutoHBM in DeviceExtras because I wanted the easter egg back. It's technically in two places now, you don't have to enable it in DeviceExtras if you're happy configuring it in LiveDisplay, but this way it's adjustable.
    • Kernel updated to 4.9.336 with changes merged from 4.9 LTS (thanks to BananaFunction for figuring out the merges from AOSP 4.9-y, LineageOS android_kernel_qcom_sdm845, and others).
    • Since I grabbed all the "use power efficient workqueues" commits from MCD kernel already, I actually added the toggle to DeviceExtras to allow you to enable the functionality. Probably saves some power, possibly while actually improving performance; try it out.
    • Updated min/max/default values for Vibration sliders in DeviceExtras. Now you can just drag it all the way to zero to turn off. Huzzah!
    • Import custom sdm845-specific vibrator AIDL from SyberiaOS OP6 12.0 branch (based on earlier qcom opensource version, but with modifications from Xiaomi sdm845 who also use the same led-qpnp-haptic.c vibration driver that we do), update ndk for Android 13. Seems to work for all effect types (even if they don't feel very different from each other), including "TICK", which means the "haptic tick on back gesture" preference actually does something, yay! DeviceExtras intensity sliders still seem to work to control different vibration types, so this might be the best combination going forward.
    • Deliberately, maliciously ruined everyone's life and removed Google Camera & Aperture from list of packages allowed to use the second rear camera sensor BECAUSE IT'S ABSOLUTE ****E. If this is truly a problem, I can recommend a good therapist.
    • Updated APNs to include "ia" type for any apn with "default" type that didn't already include "ia". I guess Android 13 needs this, and should help solve connectivity issues for some folks.
    • Updated statusbar/corner spacing & padding. You're going to hate it. I hate it too. There were changes to how burn-in protection worked, and some calculations for padding/insets in the statusbar views/viewports. Default values in framework (especially pertaining to some customization features) are fighting themselves & it looks dumb. This is the best workaround at the moment, since burn-in protection is basically non-optional for OLED panels. Trust me when I say I'll keep working on it for future releases; but the ROM team have already merged 9.1/January ASB and I need to stick a pin in this release for now.
    • Hope you all had Happy Holidays, Joyous Solstice, Chag Channukah Sameach, God Jule, Happy Kwanzaa, Merry Christmas, and wish you a Happy New Year!

    Known issues:

    • Statusbar/corner default padding looks uglier now. I know, I'm working on it. If you leave the screen on for more than 10 minutes you'll see everything start moving around (both inward toward notch AND outward toward edges); it was getting cut off when it would move outward before. Until they fix framework java for non-AOD burn-in protection to make sure it doesn't go too far wide, it's gonna probably have to stay like this.
    • Some custom launchers don't work right still, probably. Android 13 growing pains!
    • Smart charging doesn't always stop exactly at the specified percentage when using a DASH charger or when device is in deep sleep.
    • Custom fonts don't apply properly to 3rd party apps. It's in the GitHub issue tracker already.
    • Some carriers seem to have trouble with mobile data enabling; not sure why exactly. Hopefully it's fixed in 9.1; this shouldn't be a regression compared to 9.0-November at least.
    • Maintainer is busy af in real life and takes forever to get releases out.
    • You tell me, with logs!

    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're installing MinMicroG instead of Google Apps, then before ADB sideloading the zip, from built-in recovery on the phone, go to Advanced > and choose "Mount/Unmount System" first. Then go back to "Apply update" and proceed with ADB sideloading as normal to install.

    Other helpful links:​

    5

    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 8.x:​

    To be considered a "supported configuration", I need for folks to do a clean installation when jumping from Android 12 to 13, rather than trying to migrate from crDroid 8.x to 9.x. 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 an Android 13 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 wifi or mobile data under Android 13, 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 "Private DNS" and choose a different private DNS provider or simply turn the feature off.
    • Go into Settings > Network & internet, scroll down to "Connectivity check" and turn it off (in case connections to Google are being filtered at the network level).
    • Go into Settings > Network & internet > Internet, tap the gear icon next to the wifi network you're trying to connect to, and change Privacy to "Use device MAC" (some networks actively reject spoofed MAC addresses).
    • 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".
    4
    If I were you, I'd have reservations about this as well. :D
    3
    Aaaand we're official!
    Just in time to merge Android 13.0_r16 qpr1, which is an enormous rebase of android/frameworks/base/ with over 10K commits different, so Neobuddy89 and the rest of the team have been busy trying to redo all our customization/features on top of THAT for a week now. So everything that was finally working is probably broken again, sweeeeeet! 😅