[ROM][13.0_r75][Official]crDroid Android[v9.13][January 2024 ASB]

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

*** Disclaimer ***​

I am not responsible for any damage you cause to your device.
I hope you like reading.
You have been warned.


crDroid is built on top of LineageOS, and is designed to increase performance and reliability over stock Android for your device, while also attempting to bring you many of the best features in existence today.

Features:​

General:​

See our current feature list at our GitHub!

Device-specific:​

  • OnePlus Camera & Gallery fully working (using APKs directly from OOS 11.1.2.2 or apkmirror.com with verifiable signatures; currently shipping OnePlus Camera v3.14.40 and OnePlus Gallery v4.0.297); including 60fps video recording in 1080p & 4K, watermark, depth effect, smart content detection, actually-working HDR, et al.
  • DeviceExtras for OnePlus-feature-specific customizations including alert slider modes, DC dimming, High Brightness Mode including customizable Auto-HBM threshold, customizable rendered FPS overlay, digital earpiece/mic gain controls, built-in UI jitter test, 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 the 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).
  • (new as of 9.8) You will now be prompted to reboot immediately to recovery after flashing a ROM zip! This is usually a great idea during an update install, but we want to factory reset/wipe data first. Choose "No" and get back to the top level recovery menu.
  • 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!). If you want to try out f2fs as a filesystem for userdata, give it a shot. It should be stable. If you don't know, just pick ext4; that's what we've been using forever.
  • On phone, choose "Advanced" > "Reboot recovery" to reboot into recovery on the newly-flashed slot.
  • Use adb sideload to flash GApps or microG installer zips (MinMicroG installer requires you to choose "Advanced" > "Mount/unmount system" first, others might as well).
  • Reboot into system.
  • If you want to root with Magisk, complete the initial first boot setup, then reboot the phone back into recovery, choose "Apply update" > "ADB sideload", and then from the computer, 'adb sideload path/to/latest_magisk.apk' to flash Magisk, and reboot back to System afterwards.
  • ???
  • 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 update 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 recovery will now warn you that you probably want to reboot to recovery before flashing Google Apps or any other addons. It's absolutely correct! Choose "Yes" and the phone will reboot to recovery mode again.
  • 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. If you need to update to a newer version of your preferred Google Apps or microG or Magisk package, this is the time to use that shiny new zip.
  • Reboot system.

Please see post #2 for 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:

crDroid 9.13 - January 2024 ASB release notes/changelog:

Changelog since v9.12 (31 December) release:
  • January 2024 Android Security Bulletin (android-13.0.0_r75) merged from AOSP & LineageOS.
  • Upstream changes from LineageOS & crDroid ROM sources:
    • Rebased on current lineage-20 branches for our devices.
    • They're probably mostly focused on Android 14 at this point, so don't expect a lot of feature changes now.
  • Device-specific:
    • Updated to most recent kernel commits from bananafunction's lineage-20 branch.
    • More realigning to make it tidy with A14 sources.
    • Wasted a few weeks trying to see if it was going to be possible to drop debugfs in A13 the way it is in A14, and ... I don't know. But I'm not doing it for now.
    • Silenced OpenGL "could not match desired swap behavior" logspam.
  • "Misc tweaks & bugfixes." :D

Known issues:​

  • Upstream crDroid/LineageOS/Qualcomm/Google issues:
    • We're using the source-built AOSP implementations for bluetooth & NFC, since it's not possible to continue with the old prebuilt QTI vendor blobs & implementation. Some things don't work as well; nothing I can do about it. LineageOS devs agree that things are cursed on oneplus/sdm845.
    • The built-in Dialer app can't just pop on top with the fullscreen "incoming call" interface. Works fine when the screen is *off*, but if you want to actually see something over top of everything else when someone calls you and the phone is already awake, you need to enable Heads-Up Notifications. ROM devs are aware; seems to be an Android thing in general.
    • For some reason the "QR Code Scanner" lockscreen shortcut option is greyed-out until you add the "QR Scanner" QS tile; then it becomes available & works. ROM devs know, low-priority issue I guess.
    • The extra "Lock Screen" security options are missing due to an overlay in NikGapps which combines Security & Privacy settings fragments into a new layout, which clobbers our ROM layout. I'm working with Nikhail to figure it out, so in the mean time you can either use the current MindTheGapps arm64 13.0 release (if you feel like clean installing or resetting runtime permissions), or manually search Settings for "Quick Unlock" to find that screen.
  • crDroid OP6/6T-specific issues:
    • I dunno, our vibrator implementation kinda sucks (which is still thanks to OnePlus & Qualcomm). I tried to make it better; it didn't help much.
    • I have no idea why the battery drain after ~3 days keeps happening. I give up. Sometimes it seems fixed. Literally it seemed to be better in 9.12 hotfix 1 (never pushed to OTA), and back again in 9.13. There's NO CHANGE in device-specific things to account for it. Dropping debugfs and using /proc/wakelocks in kernel works, but... the system_server drain keeps happneing for some people. The "don't spoof fingerprint for Play Services Update" patch is still applied in ROM framework sources. I don't know what to say. It seems random who has the problem and who doesn't. If you have the problem, back up your stuff and try a factory reset. If it comes back, might as well upgrade to crDroid 10 (Android 14) which doesn't have the problem.

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 via ADB sideload from computer, then reboot to recovery again, and re-flash your same Google Apps/microG/Magisk/whatever install zips (again via ADB sideload), 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, you might need to go to Advanced > and choose "Mount/Unmount System" first. Then go back to "Apply update" and proceed with ADB sideloading as normal to install. I've heard this has been fixed in more recent builds this year, but haven't had a chance to confirm.
  • I definitely recommend NOT restoring data immediately on first boot, but to reboot as soon as it lets you out of Setup Wizard purgatory, then add your Google account (if using) and start restoring after rebooting. Some things are just... a little weird at first, especially if it's your first boot coming from stock OxygenOS.

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, works well.
  • I'm not going to make official releases with KernelSU patches included. However, I do make optional kernel installer zips you can flash from recovery with KSU compatibility compiled in.
  • 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:
  • WE HAVE A SMALL SYSTEM PARTITION.
    Trying to put a huge Google Apps package & addons WILL FILL IT UP and you'll run into bootloops or, sometimes more sneaky, it will *appear* to install okay but won't UPDATE correctly when addon.d survival scripts run next time. Stop trying to flash everything as a system app that doesn't need to be, and install stuff from the Play Store instead if you want Google Phone or Messages or Photos or YouTube or Translate or GBoard or any other million things that will fit GREAT in the 100+GB of free space in the data partition, but JUST WON'T GO when flashed into system. That's why I made the package below with Nik's help. Please just use it, and get everything else afterwards from the Play Store; save us both a lot of trouble, and I won't have to convert to dynamic partitions.

  • TL;DR: If you're doing a fresh install, use this Nik GApps custom version (updated 02 August 2023):
    https://nikgapps.com/Terminator-J
  • Otherwise, use Nik Gapps Core + Setup Wizard addon (if you're going to restore from a Google Drive cloud backup during setup; *not* the Pixel one, it breaks our launcher) + GoogleSearch addon (for assistant & hotword integration) + GoogleTTS (more voice integration) + Markup (optional, good screenshot editor that you cannot add from Play Store later as a user app) + DeviceSetup, CarrierServices, GooglePartnerSetup, and DeviceHealthServices for now.
    https://nikgapps.com/downloads#downloads
  • If you're already on MindTheGapps, and it's working fine, then ignore this. If you're on official MindTheGapps and facing weird battery drain issues, try updating to newer official version and doing dirty flash of ROM & MTG zip from recovery.

    I am NOT recommending the use of official MindTheGapps 13.0, as it had been exhibiting battery drain & permissions retention problems after Android 13 QPR1 was merged in December 2022, and in general doesn't use updated versions of Google Apps permissions that correspond to the manifests in newer versions. If you still need official MindTheGapps, you can get it here:
    https://github.com/MindTheGapps/13.0.0-arm64/releases
  • BitGApps ... exist. No idea how that's going. I hear it works though, so give a shot. Don't know the link, sorry.
  • Flame Gapps I have no idea about in Android 13.0.
    https://flamegapps.github.io/download.html
  • Since we are LineageOS-based, here are the Lineage team's recommendations & reasoning:
    https://wiki.lineageos.org/gapps.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.

Magisk and Google Play Integrity API (SafetyNet):​

I honestly don't even know right now.
It might be possible to use root & zygisk modules to spoof a device fingerprint to get CTS Profile & Basic Integrity, but we'll never be able to spoof Strong Integrity (hardware-backed attestation), and it seems like Google is requiring that to enable Pay/Wallet now.
It has always been a cat-and-mouse game, and they are INTENT on all fronts to prevent people from being able to block ads -- whether via rooted Android phone with unlocked bootloader, or YouTube breaking playback, or Chrome extension manifest v3 API in the browser.
It just got REAL ugly.
Update -- January 2024: It got worse! Google is now checking kernel identifier strings and even graphic driver signatures to detect custom ROMs/kernels (which implies unlocked bootloader & possibility of root).
I have neither the time nor the inclination to fight this; if the ROM team fixes it great, but I have zero time to bother with trying to do anything in device trees to spoof a damn thing. Stop using ****ty banks & apps & Google Play Services that depend on Play Integrity, and vote with your feet & wallet like an adult.

Without root:
  • We pass SafetyNet/Play Integrity out of the box, avoiding hardware-backed attestation & falling back to basic integrity (using PixelProps in framework).
  • I also build & ship ih8sn inline, which should cover all sensitive props to keep most apps from being able to detect root or bootloader unlock.
  • I don't know how to set up everything correctly to sign builds & verify everything needed to safely enable bootloader re-locking. I'm not even sure it's possible. So just don't try it; you're asking for a trip to MSMTool-land.
  • It's a cat-and-mouse game, and right now Google is going nuclear about blocking device fingerprints that custom ROMs try to spoof in order to pass Play Integrity without hardware-backed attestation. Currently, even
With root (Magisk):
  • If you root with Magisk and configure the Zygisk denylist correctly (see below), you should still pass Basic Integrity. Same with KernelSU & the KSU Zygisk module. For fastest "certified" status, wait after initial installation & signing in to Google to update Play Store & Play Services before rebooting to recovery & ADB sideloading Magisk or flashing the crDroid++ KSU-enabled kernel to root.
  • Be sure you're on an official topjohnwu release; I recommend beta or canary. "Magisk Delta" is unneeded; we already spoof the props you're worrying about. I don't even know now. Maybe Delta is the right thing, but I still don't like the idea of using Magisk builds that aren't from the official source.
  • https://github.com/chiteroman/PlayIntegrityFix seems to be the current winner if you can find a working device fingerprint to use.
  • Look, I don't like the idea of "Shamiko" or anything else that employs LSposed techniquies or similar to do framework injection, and I'm not going to troubleshoot bug reports from people using it. It's a Magisk module that's not open source, so there's no way to verify what it's doing with the root access you have given it. But if that's what makes your ****ty bank app work, then do what you gotta do. I would change to a credit union that doesn't try to hold you hostage with crappy apps.
How to configure Magisk & the Zygisk denylist:
  • 1. Hide the Magisk app:
    • Go to Magisk > Settings, and choose "Hide Magisk app", granting "install from untrusted source" permission along the way if needed, re-open the hidden "Settings" app
  • 2. Enable Zygisk process hiding:
    • Go to Magisk > Settings
    • Enable Zygisk, Enable Enforce Denylist
  • 3. Set up Zygisk denylist:
    • From Magisk Settings, go to Configure Denylist
    • Tap overflow (three-dot) menu in upper-right, and select "Show system apps"
  • 4. Find "Google Play Services" and select the following:
    • com.google.android.gms
    • com.google.android.gms.persistent [needed for Google Pay/Wallet]
    • com.google.android.gms.unstable
    • com.google.android.gms.snet
  • 5. Find "Google Play Store" and select the following:
    • com.android.vending
  • 6. [Optional, for contactless payment -- might not work any more] Find "Google Wallet" or "Google Pay" if installed and select the following:
    • everything, who cares; it's like 2 processes
  • 7. Back out of "Configure Denylist"
  • 8. Get app info for Google Play Store, force stop, and clear app cache
  • 9. Get app info for Google Play Services, and clear app cache
  • 10. Reboot
Use something like Simple Play Integrity Checker to verify that you're now passing Play Integrity API attestation with basic integrity.
But you still might not get Google Pay/Wallet to function now, boo. 😥

Other helpful links:​

  • Download current boot.img files: enchilada / fajita
  • Android platform tools (adb & fastboot)
  • OxygenOS 11.1.2.2 Full OTA: enchilada / fajita
  • Firmware update instructions (LineageOS Wiki): enchilada / fajita
  • MSMTool (oh now you're in trouble - use latest unless you have a good reason to intentionally downgrade): enchilada / fajita
  • MinMicroG (recommend the "Standard" package from "abuse-cl" releases; needs you to "Mount System" in crDroid recovery Advanced options before installing)
  • Magisk (recommend latest stable/beta v26.4 release or newer.
  • KernelSU-compatible kernel installer releases available here (not designed for any other ROM, please make sure the release tag matches the correct version to the ROM release you're flashing it on top of; GitHub doesn't know how to sort releases chronologically).
  • KernelSU apk: click here and then unroll the "Assets" drop-down for the most current release, and find the apk to install (requires KSU-enabled kernel to be flashed to do anything).
 

Attachments

  • crDroidAndroid-13.0-20240122-enchilada-v9.13_boot.img
    64 MB · Views: 30
  • crDroidAndroid-13.0-20240122-fajita-v9.13_boot.img
    64 MB · Views: 14
Last edited:

LOGS OR IT DIDN'T HAPPEN​

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

TL;DR: if you've got adb set up on the computer and authorized on the phone, plug into a USB cable, run adb bugreport from a terminal, and send me the zip file it generates, ALONG WITH A DESCRIPTION OF YOUR PHONE SETUP AND WHAT THE PROBLEM ACTUALLY IS.

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'm after, logcat and dmseg.

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:​

"Supported" status - PLEASE do not do these things if you want help:​

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 when first switching to this ROM at this major Android version (13.0).
  • 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, Lsposed/Xposed/Riru/Shamiko, 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.
  • tried to dirty flash from an earlier crDroid/Android major version (like 8.x) without a factory reset.

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):
  • Get info for the Google Play Store app, go to "Mobile data & WiFI", and toggle network access off (if on), then on (again). Force close the app, then re-open it; see if it finds the Internet now.
  • Same as above, except for Google Play Services (you'll have to find it in "Settings > Apps > See all __ apps > overflow menu > Show system" then it should be in the list).
  • 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".

OnePlus Camera & Gallery:​

  • It works. It all works, and it's also the only way to get 60fps video recording on this hardware right now, unless there's a GCam mod with configs I'm not aware of.
  • This version of OnePlus Gallery requires a Google account to actually exist before it will successfully download the expansion pack. If you're running vanilla or haven't signed into a Google account yet, it won't be able to download the thing it wants.
 
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
8
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 😅
 
Nov 10, 2021
6
2
Srinagar
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: 26
  • Screenshot_20221221-180631_Settings~2.png
    Screenshot_20221221-180631_Settings~2.png
    17.3 KB · Views: 181
  • 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: 229

Top Liked Posts

  • There are no posts matching your filters.
  • 1
    @Terminator.J ,

    Thank You for this great Rom & development.

    How can I safely go back to stock, to unroot, safely lock the bootloader and return to 100% Stock device?
    MSMTool.
    Look for the "Collection of Unbrick Tools" thread in the "OnePlus 6/6T News, Guides, and Discussion" section.
    I have a link in the 2nd post of this thread as well to help you get there.
    Be sure you run an update at least once after going back to stock with MSMTool, so that it overwrites the contents of the "B" slot; since MSMTool only flashes slot A and then flags B as invalid contents.
    1
    which is why you always need to reboot to recovery BEFORE flashing Google Apps (which installs to *current* slot, as it is not an OTA payload). It didn't really do anything, except possibly some versions of TWRP still process current-slot-system/addon.d/ OTA survival scripts (which might be what was screwing up your Google Apps installation).

    Anyway, I'm glad 13 has been working for you. It does seem rather random who has the issue and who doesn't; and most people do not. I just do not have the time to keep dealing with multiple major Android versions, and 9.15 is apparently failing to boot for multiple devices post-merge, so... I don't know how long I'll be able to keep up with it. I'm doing my best to avoid burning out and having to walk away entirely.
    Ah, well I did that from recovery.. enabled adb in recovery, opened a shell to the phone, figured out which mountpoint it was, remounted rw, and deleted the system folder.. didn't reboot, went right to flashing crdroid over the existing crdroid install. *Then* rebooted right back into recovery and flashed gapps. I didn't want to reboot with no system folder, that sounds like a bad time.. I'm an archlinux user so I'm no stranger to absolutely obliterating things to somehow fix them (actually just completely obliterated my /usr/lib folder and reinstalled all packages on top of the existing install this last weekend to fix a cuda issue.. and it worked. Not my first rodeo, won't be my last. I'm an odd one).. either way, all good. The free space upon reboot was correct, so it certainly took it. No twrp here. Initially had about 100mb free, deleting it put that at 1.2gb (iirc), then reflashing crdroid had it at about 850mb (iirc).. rebooted, still 850.. took 750mb-ish gapps without issue. It shouldn't have worked, but it somehow did, I'm almost certainly forgetting something I did in there, I tend to go into tunnel vision and forget what *exactly* I did.. maybe I didn't actually reboot between flashing the rom and gapps since the rom was already flashed? I really don't remember what steps I did in what order since I was already way off script, I'm sorry.. I do think I had to remove that folder twice since it reappeared after a reboot, probably related.. I honestly can't pin down exactly what happened, but it works (until the next update when it switches slots again? We'll see), so I'm not complaining to you (on the contrary). Android is quite different from typical Linux, where I've been breaking and fixing stuff for... Ugh, over 20 years now.. wow.. that's.. where the hell did that time go. Yet still manage to break things in very trivial ways. Proof that time and experience isn't everything 😁

    Your explanation of how the different modes interact with the filesystem is actually quite invaluable, thank you for that. I couldn't actually figure out the seemingly random behavior between the two and how things were randomly vanishing in different modes after changes.. makes a lot more sense now, thank you. Maybe next time it won't take me 2 hours to stumble my way through.. or might even be able to consistently make a change next time.

    I do get the 100 hour bug, but I also had that on risingos.. so.. not really your bug. Annoying, but not your bug. Definitely appreciate your attempts to resolve it though.

    I did want to note though (this is more for everyone, a PSA kinda thing that may not even affect anyone else), there were some GPS issues in *some* apps (Google Earth, Walmart.. but not Waze or maps), but certainly related to my non-conventional method... still, it could be useful to share if anyone else runs into this issue. Apparently my "play services" app permissions somehow reset themselves throughout all of my shenanigans, and programs that relied on them couldn't use them. You can't actually set the app permission in the app settings. There are 2 apps you'll need, "app ops permission Manager" and "shizuku". Find play services, and change location to "always". Mine showed up as "not changed".. but changing it to "always allow" did the job.

    I can't really say I know much about the development side of these roms, I'm just a fast and loose "know enough to be dangerous yet get away with it most of the time" type. I truly do appreciate what you do with this rom, and if you gotta walk away to keep your sanity intact, I totally get it. I certainly wouldn't try to convince you otherwise. But seriously, can't say thanks enough for putting in the time and love. It's noticed and appreciated.
    1
    Except you didn't... unless you deliberately mounted the INACTIVE slot's GPT partition as system (so if recovery shows you booted into slot A, you would have needed to mount /dev/block/bootdevice/by-name/system_b to /mnt/system/ and then rm -rf /mnt/system/* to preemptively clear stuff that was about to get nuked anyway).
    Initially I mounted /mnt/system, deleted, and it came back after a reboot. I don't recall exactly which partition I mounted (the system_b one doesn't seem familiar, but maybe?), but it seemed the right size and had a system folder with a bunch of Google stuff in it, so. I know you're saying it won't work, but... It went from every single app crashing on boot to everything working again. I don't have an answer, but it solved the problem somehow. Maybe it's temporary, maybe I did something in the wrong order that just masked the problem, but multiple flashes before that didn't fix it.

    Which is pointless, because it gets nuked anyway. I do not make block-based delta updates, it is not file-by-file; it replaces the filesystem inside the parition whole cloth -- or in the case of my Andorid 14 builds, wherein we moved to using retrofit dynamic partitions, it replaces the logical system filesystem (which lives inside the super-partition which spans multiple GPT partitions as a backing store) whole-cloth.
    Not file-based, not block-based.
    Really really not trying to argue here. I concede that you absolutely unequivocally know Android stuff better than I do, no question whatsoever, I'm nowhere near proficient here. I literally just wanted to thank you for the rom and toss in an amusing aside at how disgustingly dirty my process is (that apparently wasn't actually that amusing). That said, ricedroid required a dynamic partition modification that I did apply, and I haven't clean reflashed since.. maybe that's the disconnect we're having here? I don't know enough about how Android handles the filesystem stuff to know if it is or not. And also why I insisted I wasn't here for support.. because this is a very very dirty system and I know I'm sorta on my own. You don't need to waste time or resources on my horrific device. It's working, and working quite well now. All I can do is shrug and be happy I don't have to clean flash yet. I will have to eventually I'm sure, because I absolutely don't know enough to keep this going (this is how I learn.. and I'm certainly trying).. but for now? It's working great, and I appreciate the rom.. even if I'm using it extremely wrong (sorry)

    I did read the a_b tutorial you wrote. I'll read it again. I'm trying to figure this stuff out, but it's a lot.. and I tend to break stuff anyways. But I'm trying.
    1
    I did want to note though (this is more for everyone, a PSA kinda thing that may not even affect anyone else), there were some GPS issues in *some* apps (Google Earth, Walmart.. but not Waze or maps), but certainly related to my non-conventional method... still, it could be useful to share if anyone else runs into this issue. Apparently my "play services" app permissions somehow reset themselves throughout all of my shenanigans, and programs that relied on them couldn't use them. You can't actually set the app permission in the app settings. There are 2 apps you'll need, "app ops permission Manager" and "shizuku". Find play services, and change location to "always". Mine showed up as "not changed".. but changing it to "always allow" did the job.
    So, without doing too much behind-the-scenes, what happened is at some point you booted without GApps installed, then failed to factory reset after installing them before booting again.
    Android will only properly set some runtime permissions for some privileged apps on "first boot"; and refuses to grant them after.
    But! You can fake it out by resetting runtime permissions & convince it that an upgrade happened and force it to reevaluate everything (without wiping the contents of internal storage by doing a factory reset).

    TL;DR:
    - Enable developer options if you haven't already, and allow ADB debugging & rooted debugging toggles.
    - Disable cloned apps and/or work profiles, and delete any additional users you've set up if you enabled multiple users or persistent guest user.
    - Remove your Google Account from the phone, under "Settings > Passwords & accounts".
    - Plug phone into computer, open a terminal window, and run adb root, which will (re)start the adb server in root mode. Authorize communication with the computer on the phone if needed.
    - Run adb shell on terminal, and you should get a root (#) prompt.
    - Run pm uninstall-system-updates, which will remove any updated APKs to system apps from the data partition (we don't want updates to uninstalled apps lying around being confusing).
    - Run find /data/misc_de -name 'runtime-permissions.xml' | xargs sed -i -E 's/fingerprint="[^"]+"/fingerprint="dummy-value-force-upgrade-path"/', which will replace the stored fingerprint in every user's runtime-permissions.xml with a dummy value. This will ensure that the package manager service will think an Android update has happened on next boot.
    - (Optional) If you've been wanting to change GApps packages, now is the time to reboot to recovery, adb sideload the ROM zip, reboot recovery again, and flash a different Google Apps zip, and reboot system. If you're just trying to fix up the current install, you can skip the recovery & flashing stuff in this step and just reboot normally to system.
    - For a second time, run find /data/misc_de -name 'runtime-permissions.xml' | xargs sed -i -E 's/fingerprint="[^"]+"/fingerprint="dummy-value-force-upgrade-path"/', which will replace the stored fingerprint in every user's runtime-permissions.xml with a dummy value. This will ensure that the package manager service will think an Android update has happened on next boot.
    - Reboot, and now you should be able to grant evey permission to Play Store and Google Play services, including making sure they're allowed to "modify system settings" and they should finish healing themselves within 24 hours.
    - Reboot again, and now you should be good to re-add your Google account, and go back to running all your apps and re-granting permissions.
    1
    So, without doing too much behind-the-scenes, what happened is at some point you booted without GApps installed, then failed to factory reset after installing them before booting again.
    Android will only properly set some runtime permissions for some privileged apps on "first boot"; and refuses to grant them after.
    But! You can fake it out by resetting runtime permissions & convince it that an upgrade happened and force it to reevaluate everything (without wiping the contents of internal storage by doing a factory reset).
    I actually love that the tl;dr is longer than the initial post 😁 I know I know, you meant long as in the documentation, not the post...

    Thank you for the correct fix. I absolutely did boot without gapps initially. Actually a lot of really good info in here not just relevant to this specific issue as well. It's similar enough to Linux to be deceiving, which has definitely bitten me more than once.

    greaaaat and now my technical-fixation-spectrum-related tendencies are showing
    As were mine, no worries
  • 26
    NOTICE: crDroid 9.x (Android 13) is entering maintenance-only release mode, and no new feature changes or extensive reworking to fix known issues should be expected.
    I'll be merging monthly Android Security Bulletins from upstream as they're available, and pushing releases, but they may be blind builds going forward.
    Please consider updating to crDroid 10.x (Android 14):
    crDroid 10.x XDA thread - OP 6/6T
    BE3pE0l.png

    *** Disclaimer ***​

    I am not responsible for any damage you cause to your device.
    I hope you like reading.
    You have been warned.


    crDroid is built on top of LineageOS, and is designed to increase performance and reliability over stock Android for your device, while also attempting to bring you many of the best features in existence today.

    Features:​

    General:​

    See our current feature list at our GitHub!

    Device-specific:​

    • OnePlus Camera & Gallery fully working (using APKs directly from OOS 11.1.2.2 or apkmirror.com with verifiable signatures; currently shipping OnePlus Camera v3.14.40 and OnePlus Gallery v4.0.297); including 60fps video recording in 1080p & 4K, watermark, depth effect, smart content detection, actually-working HDR, et al.
    • DeviceExtras for OnePlus-feature-specific customizations including alert slider modes, DC dimming, High Brightness Mode including customizable Auto-HBM threshold, customizable rendered FPS overlay, digital earpiece/mic gain controls, built-in UI jitter test, 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 the 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).
    • (new as of 9.8) You will now be prompted to reboot immediately to recovery after flashing a ROM zip! This is usually a great idea during an update install, but we want to factory reset/wipe data first. Choose "No" and get back to the top level recovery menu.
    • 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!). If you want to try out f2fs as a filesystem for userdata, give it a shot. It should be stable. If you don't know, just pick ext4; that's what we've been using forever.
    • On phone, choose "Advanced" > "Reboot recovery" to reboot into recovery on the newly-flashed slot.
    • Use adb sideload to flash GApps or microG installer zips (MinMicroG installer requires you to choose "Advanced" > "Mount/unmount system" first, others might as well).
    • Reboot into system.
    • If you want to root with Magisk, complete the initial first boot setup, then reboot the phone back into recovery, choose "Apply update" > "ADB sideload", and then from the computer, 'adb sideload path/to/latest_magisk.apk' to flash Magisk, and reboot back to System afterwards.
    • ???
    • 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 update 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 recovery will now warn you that you probably want to reboot to recovery before flashing Google Apps or any other addons. It's absolutely correct! Choose "Yes" and the phone will reboot to recovery mode again.
    • 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. If you need to update to a newer version of your preferred Google Apps or microG or Magisk package, this is the time to use that shiny new zip.
    • Reboot system.

    Please see post #2 for 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)
    22

    crDroid 9.13 - January 2024 ASB release notes/changelog:

    Changelog since v9.12 (31 December) release:
    • January 2024 Android Security Bulletin (android-13.0.0_r75) merged from AOSP & LineageOS.
    • Upstream changes from LineageOS & crDroid ROM sources:
      • Rebased on current lineage-20 branches for our devices.
      • They're probably mostly focused on Android 14 at this point, so don't expect a lot of feature changes now.
    • Device-specific:
      • Updated to most recent kernel commits from bananafunction's lineage-20 branch.
      • More realigning to make it tidy with A14 sources.
      • Wasted a few weeks trying to see if it was going to be possible to drop debugfs in A13 the way it is in A14, and ... I don't know. But I'm not doing it for now.
      • Silenced OpenGL "could not match desired swap behavior" logspam.
    • "Misc tweaks & bugfixes." :D

    Known issues:​

    • Upstream crDroid/LineageOS/Qualcomm/Google issues:
      • We're using the source-built AOSP implementations for bluetooth & NFC, since it's not possible to continue with the old prebuilt QTI vendor blobs & implementation. Some things don't work as well; nothing I can do about it. LineageOS devs agree that things are cursed on oneplus/sdm845.
      • The built-in Dialer app can't just pop on top with the fullscreen "incoming call" interface. Works fine when the screen is *off*, but if you want to actually see something over top of everything else when someone calls you and the phone is already awake, you need to enable Heads-Up Notifications. ROM devs are aware; seems to be an Android thing in general.
      • For some reason the "QR Code Scanner" lockscreen shortcut option is greyed-out until you add the "QR Scanner" QS tile; then it becomes available & works. ROM devs know, low-priority issue I guess.
      • The extra "Lock Screen" security options are missing due to an overlay in NikGapps which combines Security & Privacy settings fragments into a new layout, which clobbers our ROM layout. I'm working with Nikhail to figure it out, so in the mean time you can either use the current MindTheGapps arm64 13.0 release (if you feel like clean installing or resetting runtime permissions), or manually search Settings for "Quick Unlock" to find that screen.
    • crDroid OP6/6T-specific issues:
      • I dunno, our vibrator implementation kinda sucks (which is still thanks to OnePlus & Qualcomm). I tried to make it better; it didn't help much.
      • I have no idea why the battery drain after ~3 days keeps happening. I give up. Sometimes it seems fixed. Literally it seemed to be better in 9.12 hotfix 1 (never pushed to OTA), and back again in 9.13. There's NO CHANGE in device-specific things to account for it. Dropping debugfs and using /proc/wakelocks in kernel works, but... the system_server drain keeps happneing for some people. The "don't spoof fingerprint for Play Services Update" patch is still applied in ROM framework sources. I don't know what to say. It seems random who has the problem and who doesn't. If you have the problem, back up your stuff and try a factory reset. If it comes back, might as well upgrade to crDroid 10 (Android 14) which doesn't have the problem.

    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 via ADB sideload from computer, then reboot to recovery again, and re-flash your same Google Apps/microG/Magisk/whatever install zips (again via ADB sideload), 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, you might need to go to Advanced > and choose "Mount/Unmount System" first. Then go back to "Apply update" and proceed with ADB sideloading as normal to install. I've heard this has been fixed in more recent builds this year, but haven't had a chance to confirm.
    • I definitely recommend NOT restoring data immediately on first boot, but to reboot as soon as it lets you out of Setup Wizard purgatory, then add your Google account (if using) and start restoring after rebooting. Some things are just... a little weird at first, especially if it's your first boot coming from stock OxygenOS.

    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, works well.
    • I'm not going to make official releases with KernelSU patches included. However, I do make optional kernel installer zips you can flash from recovery with KSU compatibility compiled in.
    • 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:
    • WE HAVE A SMALL SYSTEM PARTITION.
      Trying to put a huge Google Apps package & addons WILL FILL IT UP and you'll run into bootloops or, sometimes more sneaky, it will *appear* to install okay but won't UPDATE correctly when addon.d survival scripts run next time. Stop trying to flash everything as a system app that doesn't need to be, and install stuff from the Play Store instead if you want Google Phone or Messages or Photos or YouTube or Translate or GBoard or any other million things that will fit GREAT in the 100+GB of free space in the data partition, but JUST WON'T GO when flashed into system. That's why I made the package below with Nik's help. Please just use it, and get everything else afterwards from the Play Store; save us both a lot of trouble, and I won't have to convert to dynamic partitions.

    • TL;DR: If you're doing a fresh install, use this Nik GApps custom version (updated 02 August 2023):
      https://nikgapps.com/Terminator-J
    • Otherwise, use Nik Gapps Core + Setup Wizard addon (if you're going to restore from a Google Drive cloud backup during setup; *not* the Pixel one, it breaks our launcher) + GoogleSearch addon (for assistant & hotword integration) + GoogleTTS (more voice integration) + Markup (optional, good screenshot editor that you cannot add from Play Store later as a user app) + DeviceSetup, CarrierServices, GooglePartnerSetup, and DeviceHealthServices for now.
      https://nikgapps.com/downloads#downloads
    • If you're already on MindTheGapps, and it's working fine, then ignore this. If you're on official MindTheGapps and facing weird battery drain issues, try updating to newer official version and doing dirty flash of ROM & MTG zip from recovery.

      I am NOT recommending the use of official MindTheGapps 13.0, as it had been exhibiting battery drain & permissions retention problems after Android 13 QPR1 was merged in December 2022, and in general doesn't use updated versions of Google Apps permissions that correspond to the manifests in newer versions. If you still need official MindTheGapps, you can get it here:
      https://github.com/MindTheGapps/13.0.0-arm64/releases
    • BitGApps ... exist. No idea how that's going. I hear it works though, so give a shot. Don't know the link, sorry.
    • Flame Gapps I have no idea about in Android 13.0.
      https://flamegapps.github.io/download.html
    • Since we are LineageOS-based, here are the Lineage team's recommendations & reasoning:
      https://wiki.lineageos.org/gapps.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.

    Magisk and Google Play Integrity API (SafetyNet):​

    I honestly don't even know right now.
    It might be possible to use root & zygisk modules to spoof a device fingerprint to get CTS Profile & Basic Integrity, but we'll never be able to spoof Strong Integrity (hardware-backed attestation), and it seems like Google is requiring that to enable Pay/Wallet now.
    It has always been a cat-and-mouse game, and they are INTENT on all fronts to prevent people from being able to block ads -- whether via rooted Android phone with unlocked bootloader, or YouTube breaking playback, or Chrome extension manifest v3 API in the browser.
    It just got REAL ugly.
    Update -- January 2024: It got worse! Google is now checking kernel identifier strings and even graphic driver signatures to detect custom ROMs/kernels (which implies unlocked bootloader & possibility of root).
    I have neither the time nor the inclination to fight this; if the ROM team fixes it great, but I have zero time to bother with trying to do anything in device trees to spoof a damn thing. Stop using ****ty banks & apps & Google Play Services that depend on Play Integrity, and vote with your feet & wallet like an adult.

    Without root:
    • We pass SafetyNet/Play Integrity out of the box, avoiding hardware-backed attestation & falling back to basic integrity (using PixelProps in framework).
    • I also build & ship ih8sn inline, which should cover all sensitive props to keep most apps from being able to detect root or bootloader unlock.
    • I don't know how to set up everything correctly to sign builds & verify everything needed to safely enable bootloader re-locking. I'm not even sure it's possible. So just don't try it; you're asking for a trip to MSMTool-land.
    • It's a cat-and-mouse game, and right now Google is going nuclear about blocking device fingerprints that custom ROMs try to spoof in order to pass Play Integrity without hardware-backed attestation. Currently, even
    With root (Magisk):
    • If you root with Magisk and configure the Zygisk denylist correctly (see below), you should still pass Basic Integrity. Same with KernelSU & the KSU Zygisk module. For fastest "certified" status, wait after initial installation & signing in to Google to update Play Store & Play Services before rebooting to recovery & ADB sideloading Magisk or flashing the crDroid++ KSU-enabled kernel to root.
    • Be sure you're on an official topjohnwu release; I recommend beta or canary. "Magisk Delta" is unneeded; we already spoof the props you're worrying about. I don't even know now. Maybe Delta is the right thing, but I still don't like the idea of using Magisk builds that aren't from the official source.
    • https://github.com/chiteroman/PlayIntegrityFix seems to be the current winner if you can find a working device fingerprint to use.
    • Look, I don't like the idea of "Shamiko" or anything else that employs LSposed techniquies or similar to do framework injection, and I'm not going to troubleshoot bug reports from people using it. It's a Magisk module that's not open source, so there's no way to verify what it's doing with the root access you have given it. But if that's what makes your ****ty bank app work, then do what you gotta do. I would change to a credit union that doesn't try to hold you hostage with crappy apps.
    How to configure Magisk & the Zygisk denylist:
    • 1. Hide the Magisk app:
      • Go to Magisk > Settings, and choose "Hide Magisk app", granting "install from untrusted source" permission along the way if needed, re-open the hidden "Settings" app
    • 2. Enable Zygisk process hiding:
      • Go to Magisk > Settings
      • Enable Zygisk, Enable Enforce Denylist
    • 3. Set up Zygisk denylist:
      • From Magisk Settings, go to Configure Denylist
      • Tap overflow (three-dot) menu in upper-right, and select "Show system apps"
    • 4. Find "Google Play Services" and select the following:
      • com.google.android.gms
      • com.google.android.gms.persistent [needed for Google Pay/Wallet]
      • com.google.android.gms.unstable
      • com.google.android.gms.snet
    • 5. Find "Google Play Store" and select the following:
      • com.android.vending
    • 6. [Optional, for contactless payment -- might not work any more] Find "Google Wallet" or "Google Pay" if installed and select the following:
      • everything, who cares; it's like 2 processes
    • 7. Back out of "Configure Denylist"
    • 8. Get app info for Google Play Store, force stop, and clear app cache
    • 9. Get app info for Google Play Services, and clear app cache
    • 10. Reboot
    Use something like Simple Play Integrity Checker to verify that you're now passing Play Integrity API attestation with basic integrity.
    But you still might not get Google Pay/Wallet to function now, boo. 😥

    Other helpful links:​

    • Download current boot.img files: enchilada / fajita
    • Android platform tools (adb & fastboot)
    • OxygenOS 11.1.2.2 Full OTA: enchilada / fajita
    • Firmware update instructions (LineageOS Wiki): enchilada / fajita
    • MSMTool (oh now you're in trouble - use latest unless you have a good reason to intentionally downgrade): enchilada / fajita
    • MinMicroG (recommend the "Standard" package from "abuse-cl" releases; needs you to "Mount System" in crDroid recovery Advanced options before installing)
    • Magisk (recommend latest stable/beta v26.4 release or newer.
    • KernelSU-compatible kernel installer releases available here (not designed for any other ROM, please make sure the release tag matches the correct version to the ROM release you're flashing it on top of; GitHub doesn't know how to sort releases chronologically).
    • KernelSU apk: click here and then unroll the "Assets" drop-down for the most current release, and find the apk to install (requires KSU-enabled kernel to be flashed to do anything).
    9

    LOGS OR IT DIDN'T HAPPEN​

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

    TL;DR: if you've got adb set up on the computer and authorized on the phone, plug into a USB cable, run adb bugreport from a terminal, and send me the zip file it generates, ALONG WITH A DESCRIPTION OF YOUR PHONE SETUP AND WHAT THE PROBLEM ACTUALLY IS.

    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'm after, logcat and dmseg.

    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:​

    "Supported" status - PLEASE do not do these things if you want help:​

    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 when first switching to this ROM at this major Android version (13.0).
    • 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, Lsposed/Xposed/Riru/Shamiko, 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.
    • tried to dirty flash from an earlier crDroid/Android major version (like 8.x) without a factory reset.

    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):
    • Get info for the Google Play Store app, go to "Mobile data & WiFI", and toggle network access off (if on), then on (again). Force close the app, then re-open it; see if it finds the Internet now.
    • Same as above, except for Google Play Services (you'll have to find it in "Settings > Apps > See all __ apps > overflow menu > Show system" then it should be in the list).
    • 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".

    OnePlus Camera & Gallery:​

    • It works. It all works, and it's also the only way to get 60fps video recording on this hardware right now, unless there's a GCam mod with configs I'm not aware of.
    • This version of OnePlus Gallery requires a Google account to actually exist before it will successfully download the expansion pack. If you're running vanilla or haven't signed into a Google account yet, it won't be able to download the thing it wants.
    9
    Well that took an extra two weeks, but hey.
    Pushed 9.4 to OTA last night, including fixes for the white corners peeking out from under the curve on enchilada.
    The white corners will still be there in screenshots, because... reasons.
    Look, there are kind of two ways to get to a similar place with rounded corners & a notch & status bar spacing.
    I kinda hopped over to a different one than what LineageOS uses, because it played better with burn-in protection a few months ago (that's what was up with stuff wandering around), while setting "rounded_corner_radius[_top|_bottom]" plus "rounded_corner_content_padding" gets ignored more?
    I dunno, it's a moving target and I'm tired of it.

    I need to sort out my dimens overlay commits and then try A/B testing again to see if it's even necessary still on A13 now. Heh, "need to". I need to stop having to worry about little stuff like that, and get on with life.

    ANYWAY! crDroid 9.4 pushed to OTA, second post has updated changelog (and link to 01 May updated release of my custom config NikGapps, recommended package going forward).
    9
    Will this be in OTA?
    Yeah, eventually. I got a little help with actually figuring out which kernel commits needed reverting to see if it takes care of the issue from bananafunction, and it's just been a super-busy week.

    Oh, and I also ended up moving to a new build box...
    photo_2023-04-01_21-01-11.jpg