Skip to content

Field Reference

Device Information Fields

The following fields can be used in templates or [[apps]]. Each field drives both an android.os.Build static field (JNI overwrite, effective only inside the app process) and the corresponding system properties (readable by native APIs such as __system_property_get):

FieldBuild fieldSystem propertiesDescription
manufacturerBuild.MANUFACTURERro.product.manufacturer + partition variantsManufacturer (e.g. Xiaomi, Samsung)
brandBuild.BRANDro.product.brand + partition variantsBrand (e.g. Redmi, nubia)
marketname— (properties only)ro.product.marketname + ro.vendor.oplus.market.nameMarket name (e.g. Nothing Phone (3)); OnePlus/OPPO devices read the latter
modelBuild.MODELro.product.model + partition variantsModel number (e.g. NX769J, SM-S9280)
name— (properties only)ro.product.name + partition variantsInternal product name (e.g. popsicle)
deviceBuild.DEVICEro.product.device + partition variantsCodename (e.g. xuanyuan); falls back to the value of name when unset
productBuild.PRODUCT— (no system property)Codename (e.g. xuanyuan); Build field only
hardwareBuild.HARDWAREro.hardwareHardware name (e.g. qcom); no partition variants
boardBuild.BOARDro.product.boardBoard name (e.g. kalama); no partition variants
fingerprintBuild.FINGERPRINTro.build.fingerprintFingerprint
build_idBuild.IDro.build.id, ro.system.build.id, ro.vendor.build.id, ro.product.build.idBuild ID (e.g. UKQ1.230917.001)
characteristics— (properties only)ro.build.characteristicsCharacteristics (e.g. tablet)

What are partition variants?

They are the 6 properties ro.product.{odm,vendor,system,system_ext,product,bootimage}.<field>. Bionic property reads route by prefix to partition-specific property areas — OnePlus/OPPO and other devices read these variants, so writing them all keeps reads consistent across devices.

Android Version Spoofing

FieldBuild fieldSystem propertiesExamples
android_versionBuild.VERSION.RELEASEro.build.version.release, ro.system.build.version.release, ro.vendor.build.version.release, ro.product.build.version.release"15", "14", "13"
sdk_intBuild.VERSION.SDK_INT (integer)ro.build.version.sdk, ro.system.build.version.sdk, ro.vendor.build.version.sdk, ro.product.build.version.sdk35, 34, 33

Per-app DPI

Set dpi (range 120640) in a template or [[apps]], for example dpi = 420. The companion saves the current density override and runs wm density 420. It restores the original value about 2 seconds after the target app goes to the background or exits, and reapplies it when the app returns to the foreground. If there was no override, it restores with wm density reset.

Custom Properties

custom_props sets arbitrary system properties (written verbatim, no partition-variant expansion), usable in both templates and [[apps]], and supports special marker values:

toml
[[apps]]
package = "com.custom.app"
manufacturer = "Custom"

[apps.custom_props]
"ro.custom.property" = "custom_value"
"ro.debug.mode" = "__DELETE__"    # delete this property
"ro.empty.value" = "__EMPTY__"    # set to empty string

Special Marker Values

Marker valueMeaning
Normal stringSet to that value
""Set to an empty string (equivalent to __EMPTY__)
"__EMPTY__"Set to an empty string
"__DELETE__"Delete the property (via companion resetprop)

Marker values behave differently in structured fields

__DELETE__ triggers deletion of the corresponding property, but the literal __DELETE__ string is also written into the property and the Build field; __EMPTY__ is written literally as-is. Use marker values only in custom_props; for structured fields, leaving the value empty ("" or omitted) means "leave unchanged".

Feature Switches

FieldDefaultDescription
companion_resetpropfalseWhen true, skips COW and sends all properties through the companion resetprop (writes the property area directly, without going through property_service) for system-wide consistent reads; when false (default), COW takes priority and only affects the current process's memory. See Advanced Usage
dpiTemporarily sets system display density via wm density; range 120640; the companion saves and restores the original override
force_denylist_unmountinherits default_force_denylist_unmountForce-enable Zygisk FORCE_DENYLIST_UNMOUNT for this app; priority: app > template > global default
cpu_spoofCPU spoofing preset name referencing [cpu_presets]; see CPU Spoofing
cpu_spoof_customRaw /proc/cpuinfo content; takes priority over cpu_spoof

Notes:

  • All fields except package are optional
  • When using a template's packages, no [[apps]] entry is needed (auto-applied)
  • An [[apps]] record replaces the template entirely; unset fields do not fall through (see Basic Configuration)
  • Fields not listed in the tables above are silently ignored (they do not affect parsing)

Released under the GPL-3.0 License.