[Samsung Galaxy S9 & S9+ Cross Device Development] _alexndr:
Important notes for Developers / Chefs !!!

This ROM is NOT based on any other custom ROM. My work contains many original ideas and innovations that I introduced as the first in the ROM development (see "Changelist" in post #2). Of course, it does not mean that I do not need to thank anyone - there are people who helped / inspired me anyhow (see "Credits").

I will risk the statement that at this moment my "DevBase" is the most tuned and nuanced custom ROM available at XDA Forum :cool:

I agree to use any part of my work to create other custom ROMs, but it would be great if you add me to the credits :)

EDIT: Note related to creating "$ZIPFILE" which contains a file larger than ~4GB (e.g. system.img): the order of adding content to "$ZIPFILE" is very important! META-INF need to be added as the first dir in the archive! Example (my DevBase case):

zip -r -9 G96xFXXU1xxxx_DevBase.zip META-INF options.prop ALEXNDR

It seems that misunderstanding of the above problem is the main reason why many devs give up and do not use my base as a pattern.

Hello :)

I have decided to create a pure base with my unified installer (should work with many other Samsung devices), which can be a pattern for ROM Chefs (not only for beginners) :D ROM is initially safe de-bloated (read below what does it exactly mean), but all features are present and works!

ROM can be installed by normal users as well. If you like a little de-bloated ROMs, clean but with all working features - probably there is no better alternative :D

ROM for G96xF/DS/FD contains OXM multi CSC package, list of available CSCs is as follow:

ACR, AFG, AFR, ATO, AUT, BGL, BNG, BRI, BTC, BTU, CAC, CAM, CAU, CEL, CPW, DBT, DKR, ECT, EGY, EUR, GLB, ILO, INS, ITV, KSA, LAO, LUX, LYS, MAT, MID, MM1, MWD, MYM, NEE, NPL, NZC, OPS, ORX, PAK, PCL, PHE, PHN, PNG, PTR, ROM, SEB, SEE, SEK, SIN, SKZ, SLK, SMA, SMP, STH, TEB, TEL, THL, THR, TMC, TNZ, TPH, TUN, TUR, VAU, VFJ, VNZ, WTL, XEF, XEH, XEO, XEU, XEZ, XFA, XFE, XME, XNX, XNZ, XSA, XSG, XSP, XTC, XXV

ROM for G96xN contains OKR multi CSC package, list of available CSCs is as follow: KOO, KTC, LUC, SKC

NEW !!! :D I present you new, unique option: "Keep current CSC", so you can install my DevBase keeping your original CSC even if it is not listed above! Note that in such case this option has some limitations - more informations you can find in related older threads, e.g. HERE

ALEXNDR.G96xFXXUHFVG4:

1. Base:

- Odexed (original stock files) + stock kernel

- Multi CSC OXM (list of natively supported CSC as above) (*)

- Removed KNOX related content (useless on rooted phones)

- Removed Rlc.apk & vaultkeeperd (to avoid "OEM unlock issue")

- Rooted systemlessly (Magisk v23.0) (*)

- All original features are present and works (except KNOX related apps)

- Added "App Lock" feature (Settings -> Advanced features)

- No visual changes (100% stock look)

2. CscFeature MOD (enabled some built-in, hidden features):

- Added shutter sound menu in Camera app

- Sending/receiving MMS without data on

- Show SMS/MMS sending time instead of receiving

- Added "Call/Message block" option in Settings

- Added "Show network speed" toggle (Settings -> Display -> Status bar)

- Added "LTE Only" network mode (NOTE: voice calls may not work in this mode)

- 4G/3G network support in any CSC (master/slave SIM, applies to dual SIM variants)

- Call Recording (via "Record" button or "Auto record calls" option)

- Enabled "Recent App Protection" feature

3. Xposed framework & Xposed Installer app [optional] (*)

- NOTE: Applies to Oreo DevBase. There is no Xposed for Pie yet

4. Virtual / physical Safe De-Bloat (more info below) (*)

What does it mean and why is it called "safe"?

- ONLY apps available in stores are removed / skipped in DevBase, so you can easy (re)install any of these app if you like

- ONLY pre-installed system apps are removed / skipped, DevBase installer will never touch any updated app nor app installed manually from a store

- By default virtual Safe De-Bloat is applied with exact same effect as physical (completely skips apps at boot). You can force to delete apps physically but it is recommended only if you really need more space in /system

Thus, the following conclusions can be drawn:

1. If you install my DevBase directly over stock ROM without performing "Wipe data" - in most cases almost all these apps will remain untouched, because almost all apps have been updated already (stored on /data). But then you will be able to remove any useless app using the "Application manager", like any other app. Removed manually app will not appear again until you use my DevBase while updating.

2. If you perform "Wipe data" while installing my DevBase - then all apps listed below will be removed. If you would like to use any of these apps - just install it manually from appropriate store. Installed manually app will not be removed during the next DevBase update.

Removed / skipped apps list:

Excel

Facebook

LinkedIn

OneDrive

PowerPoint

Word

(*) - these options can be controlled by editing options.prop file (you can find such file in ZIP's root directory). Just place modified options.prop file (use e.g. Notepad++ to edit) in the root directory of internal emulated scdard (/data/media/0) or extSdCard (recommended if you plan to format internal emulated sdcard) and then start the installation. More info below:

#

# DevBase by ALEXNDR (_alexndr @ XDA)

#

# Configuration file to allow customize the installation.

#

# File inside the ZIP installer is just for reference - please DO NOT modify it!

# If you want to change some options listed below - edit the copy of this file, then place

# modified options.prop file in the root directory of internal emulated scdard (/data/media/0)

# or in the root directory of extSdCard (recommended if you plan to format internal emulated

# sdcard) and then start the installation.

#

# TIP: You do not need to repeat this step every next update I will release. As long as your

# customized options.prop file is present in the (ext)SdCard - future DevBase installers will

# "read in your mind" that you want to install with such options again.

#

# NOTE: All below variables and values are case sensitive!

# Enable root access. Allowed values:

# true - install Magisk as root solution (default)

# false - do not root device

root=true

# Install Xposed framework matched to the ROM (there is also a possibility to detect Xposed profile

# automatically, but auto-detection will not work if user will perform wipe /system). Allowed values:

# auto - detect Xposed profile automatically

# true - force Xposed framework installation

# false - do not install Xposed framework

xposed=auto

# CSC Selection. Allowed values:

# KCSC - Keep current CSC, recommended in most cases (automatic selection or keep current CSC contents).

# You can force the use of natively supported CSC by typing (use UPPERCASE!): ACR, AFG, AFR, ATO, AUT, BGL,

# BNG, BRI, BTC, BTU, CAC, CAM, CEL, CPW, DBT, DKR, ECT, EGY, EUR, GLB, ILO, INS, ITV, KSA, LAO, LUX, LYS,

# MAT, MID, MM1, MWD, MYM, NEE, NPL, NZC, OPS, ORX, PAK, PCL, PHE, PHN, PNG, PTR, ROM, SEB, SEE, SEK, SIN,

# SKZ, SLK, SMA, SMP, STH, TEB, TEL, THL, THR, TMC, TNZ, TPH, TUN, TUR, VAU, VFJ, VNZ, WTL, XEF, XEH, XEO,

# XEU, XEZ, XFA, XFE, XME, XNX, XNZ, XSA, XSG, XSP, XTC, XXV

CSC=KCSC

# Custom CSC Features. Allowed value in each line: <Example_line>value</Example_line>

<CscFeature_Common_SupportWcdmaInSlave>true</CscFeature_Common_SupportWcdmaInSlave>

<CscFeature_VoiceCall_ConfigRecording>RecordingAllowed</CscFeature_VoiceCall_ConfigRecording>

<CscFeature_Setting_EnableMenuBlockCallMsg>true</CscFeature_Setting_EnableMenuBlockCallMsg>

<CscFeature_Setting_CustNetworkSelMenu4>LTEONLY</CscFeature_Setting_CustNetworkSelMenu4>

<CscFeature_Setting_SupportRealTimeNetworkSpeed>true</CscFeature_Setting_SupportRealTimeNetworkSpeed>

<CscFeature_SmartManager_ConfigSubFeatures>roguepopup|autoclean|autorestart|applock|trafficmanager</CscFeature_SmartManager_ConfigSubFeatures>

<CscFeature_SmartManager_DisableAntiMalware>true</CscFeature_SmartManager_DisableAntiMalware>

<CscFeature_SystemUI_SupportRecentAppProtection>true</CscFeature_SystemUI_SupportRecentAppProtection>

<CscFeature_Message_DisplaySmsTimeAs>server</CscFeature_Message_DisplaySmsTimeAs>

<CscFeature_Message_DisplayMmsTimeAs>server</CscFeature_Message_DisplayMmsTimeAs>

<CscFeature_Camera_ShutterSoundMenu>true</CscFeature_Camera_ShutterSoundMenu>

<CscFeature_RIL_ForceConnectMMS>true</CscFeature_RIL_ForceConnectMMS>

# Custom physical debloat list. Allowed value in each line: path to app's directory in /system.

# (NOTE: wildcards are allowed here)

/system/*app/SamsungPass*

/system/*app/SamsungPay*

/system/*app/SecureFolder*

/system/app/SecurityLogAgent

/system/priv-app/Fast

/system/priv-app/Rlc

# Custom virtual debloat list. Allowed value in each line: exact app name with .apk extension.

# (NOTE: without app's path/directory, wildcards are NOT allowed here!)

Excel_SamsungStub.apk

Facebook_stub.apk

FBAppManager_NS.apk

FBInstaller_NS.apk

FBServices.apk

FotaAgent.apk

LinkedIn_SamsungStub.apk

OneDrive_Samsung_v3.apk

PowerPoint_SamsungStub.apk

Word_SamsungStub.apk

NEW !!! :D Starting from DevBase v3.0 there is a new customization method - you can change frequently switched root options or encrypt your device just by renaming installer's ZIP file name (instead of editing options.prop file). Currently supported "strings" in the file name: "noroot", "encrypt", "rescue", "xposed", "CSC_xxxx.zip":

Case 1 (default) - install the ROM with Magisk & MagiskSU as root solution

(just flash ZIP file "as it is")

Case 2 - do not root device

(place "noroot" string anywhere in the ZIP file name, e.g. "G96xFxxx_DevBase_v6.x_noroot.zip")

Regardless of the above root options, starting from DevBase v4.4+, you can also use "encrypt" option (place "encrypt" string anywhere in the ZIP file name, e.g. "G960Fxxx_DevBase_v6.x_encrypt.zip"). All your data will be encrypted "on-the-fly" at next boot after ROM update/reinstall. Wipe data is NOT necessary to use this option. You will NOT lose your data & apps but it is extremely important - do not interrupt encryption process during this "special" boot! Booting can take much longer and you may think it is a bootloop, but it isn't! If you have a large amount of used data - it is recommended to connect your phone to the charger during boot (and open a beer to avoid heart attack while waiting). You do not need to use "encrypt" option again in case of another DevBase update(s) - please read carefully notes below.

In DevBase ROM v4.5+ there is a "rescue" option, which may be especially helpful in case of encrypted device if you experienced bootloop caused by e.g. systemless mod/module/xposed stored on /data (without access to /data from TWRP). In case of bootloop just place "rescue" string anywhere in the ZIP file name, e.g. "G96xFxxx_DevBase_v6.x_rescue.zip" and then (re)install the ROM - should help in case of (probably) all possible bootloop reasons. In addition to the normal (re)installation of the ROM (thus restoring the original /system, kernel, modem, etc.) this option will also force "Core Only Mode" in Magisk and will move all SYSTEMLESS DevBase modifications to /data/devbase/system/.backup, before performing bind mounts, so original files will be used.

In DevBase ROM v4.6+ there is a possibility to force CSC by renaming ZIP file name - this is the only case-sensitive variable which have to be put at the beginning of ZIP file name and must be folloed by "_" (due to the fact that there is a high risk that ZIP file name may contain CSC code accidentally). Example (to force CSC DBT): "DBT_G96xFxxx_DevBase_v6.x.zip".

In DevBase ROM v5.6+ there is "xposed" option which allows you to force Xposed framework installation. It is NOT forced by default - you need to force it manually while installing ROM with Xposed first time, renaming ZIP's file name to e.g. "G96xFxxx_DevBase_v6.x_xposed.zip". Next ROM's updates will detect and apply Xposed profile automatically, unless you wipe /system - then auto detection is not possible.

Notes related to encrypted devices:

How to confirm that your data are encrypted:

1. Go to TWRP and check if it is possible to mount /data. If NOT - all is ok :) "Failed to mount '/data' (invalid argument)" will be the a frequent message that you need to like in the future ;)

How to update DevBase ROM to a newer version:

1. Copy a newer DevBase ROM to extSdCard or OTG storage (you do NOT need to use "encrypt" option in ZIP file name again, if your device is encrypted already - it just remain encypted)

2. Go to TWRP -> "Install" and flash ZIP file from extSdCard or OTG

3. That's all :cool:

The risk of data loss in case of encrypted devices, depending on the ROM scenario:

1. DevBase only: VERY LOW RISK (*)

2. Coming from other custom ROM with encrypted data - MEDIUM RISK (recommended backup)

3. Installing other custom ROM over DevBase - MEDIUM RISK (recommended backup, anyway)

4. Installing pure stock (using Odin) over DevBase (or over any other custom ROM) - VERY HIGH RISK (not recommended!)

(*) There is still a risk to get into a bootloop if you install stuffs like: Xposed framework, incompatible Magisk or Xposed module, incompatible MOD, etc. In case of bootloop just try to use "rescue" option described above :)

EDIT (Dec-01-2019): Very important info!!! Encryption will not be possible if you format /data using new TWRP (3.3.x-x). If you prefer encrypted device - it is highly recommended to use TWRP 3.2.3-x to format /data. If you are not sure which version you have used to format data - it is much better to perform clean install using TWRP 3.2.3-x to format /data before forcing encryption. More info HERE

Notes related to EFS backup:

During install, my ROM's installer always performs EFS backup to {storage}/.backup/efs (where {storage} may be /external_sd, /usb-otg, /sdcard - in the preferred order). It is recommended to copy EFS backup occasionally outside the phone and store in safe location (PC, OTG, etc). There are 2 backups - when you first time installed my ROM (efs_backup.tar.gz) and recent, created additionally, just in case (efs_recent.tar.gz). Most useful will be most probably the first one (efs_backup).

You probably will never need these files, but sometimes s**t happens and restoring EFS backup may be the only one way to rescue your device!

When do I need to restore EFS backup?

- lost/invalid IMEI number

- proper IMEI but unable to connect to the network

- connected to the network but unable to make a call and/or transfer data

- unrecoverable bootloop (even after clean DevBase install with default settings)

NOTE: In contrast to many other custom ROMs - my installer uses gzip compression (*.img.gz) to store EFS backup(s). Restore command for your device is stored in txt file in the same directory with EFS backup. If you forgot command - you can read txt file containing proper command @ PC (Notepad) or even directly form TWRP using Terminal's 'cat' command, e.g.:

cat /external_sd/.backup/efs/efs_backup.txt

NOTE: Do not panic, read the txt file peacefully and type command exactly as it is in TWRP's Terminal, then tap blue [enter] button. After all - please reboot device. If the problem was EFS related - your device just has been rescued :cool:

Installation:

TWRP recovery (KNOX 0x1): open file using "Install (Zip)" option and confirm operation. If you want to perform "clean install' - perform "wipe data/factory reset" BEFORE flashing Zip!

Wipe data is NOT required if you are coming from stock ROM (already rooted) or a previous version of my DevBase (if you leave "Keep current CSC" option untouched in /options.prop or if you choose same CSC as you are currently using). In other cases - wipe data is highly recommended!

I do not recommend using any additional "superwipes" or format /system before install my DevBase (my installer cleans your system well enough!).

Credits:

@samsung for awesome device & stock firmware base

@Chainfire for systemless SuperSU and a lot of inspiration

@topjohnwu for Magisk and another inspiration

@rovo89 for Xposed framework & Xposed Installer app

@fei-ke for omc-decoder

@Zackptg5, @osm0sis & @jcadduono for no-verity*

@Tkkg1994 for initial help with stock kernel's patches

@corsicanu & @jesec for TWRP recovery

@Duncan1982 & @bennebartsch for initial tests

Hit Thanks button if you like my work. If you really appreciate my work - feel free buy me a coffee/beer (or flowers/wine for my wife who is patiently enduring my hobbies) :) https://www.paypal.com/donate/?business=RFGVQYRC34RVQ&currency_code=EUR

Due to the fact, that some countries banned PayPal - I have created also Patreon site: https://www.patreon.com/_alexndr