• Introducing XDA Computing: Discussion zones for Hardware, Software, and more!    Check it out!
  • Fill out your device list and let everyone know which phones you have!    Edit Your Device Inventory

[Guide] demystifying build.prop [Valid entries]

Search This thread

ShyPixie

Senior Member
Dec 19, 2012
55
261
São Paulo
lara.craft.net.br
Tired of see so many "tweaks" that do not work, I decided to dig deeper.
Scavenging the entire Android source, I checked entries which are actually valid.


Note 1: Ignored the build.prop entries created by buildinfo.sh (default entries)

Note 2: I'll update/upgrade the topic gradually.

I accept all help, suggestions, observations, comments and so on.

Entries that DO NOT exist in the source:
(Again: I scaveged all Android source code)

  • ro.ril.disable.power.collapse
  • ro.mot.eri.losalert.delay
  • ro.config.hw_fast_dormancy
  • ro.config.hw_power_saving
  • windowsmgr.max_events_per_sec
  • persist.cust.tel.eons
  • ro.max.fling_velocity
  • ro.min.fling_velocity
  • ro.kernel.checkjni
  • dalvik.vm.verify-bytecode
  • debug.performance.tuning
  • video.accelerate.hw
  • ro.media.dec.jpeg.memcap
  • ro.config.nocheckin
  • profiler.force_disable_ulog
  • profiler.force_disable_err_rpt
  • ersist.sys.shutdown.mode
  • ro.HOME_APP_ADJ

Notes:

dalvik.vm.verify-bytecode
  • Previous version of the runtime supported the boolean
    dalvik.vm.verify-bytecode property, but that has been
    superceded by dalvik.vm.dexopt-flags.

ro.kernel.checkjni
  • The correct entry is ro.kernel.android.checkjni

ro.HOME_APP_ADJ
  • The interaction with this is been removed.
  • From google:
    This is a process holding the home application -- we want to try
    avoiding killing it, even if it would normally be in the background,
    because the user interacts with it so much.

All ro.media.enc* entries
  • A more elegant alternative would be to edit /system/etc/media_profiles.xml

Valid entries on CyanogenMod and AOSP:

dalvik.vm.checkjni and ro.kernel.android.checkjni
platform_frameworks_base/core/jni/AndroidRuntime.cpp (480:489/466:475)

Code:
property_get("dalvik.vm.checkjni", propBuf, "");
    if (strcmp(propBuf, "true") == 0) {
        checkJni = true;
    } else if (strcmp(propBuf, "false") != 0) {
        /* property is neither true nor false; fall back on kernel parameter */
        property_get("ro.kernel.android.checkjni", propBuf, "");
        if (propBuf[0] == '1') {
            checkJni = true;
        }
    }

wifi.supplicant_scan_interval
android_external_wpa_supplicant/wpa_supplicant.c (2459:2460)

Code:
if (property_get("wifi.supplicant_scan_interval", scan_prop, "5") != 0) {
    wpa_s->scan_interval = (int)strtol(scan_prop, &endp, 0);

service.adb.tcp.port
platform_system_core/adb/adb.c (1366:1372/1350:1356)

Code:
// If one of these properties is set, also listen on that port
// If one of the properties isn't set and we couldn't listen on usb,
// listen on the default port.
property_get("service.adb.tcp.port", value, "");
if (!value[0]) {
    property_get("persist.adb.tcp.port", value, "");
}

ro.sf.lcd_density and qemu.sf.lcd_density
platform_frameworks_base/core/java/android/util/DisplayMetrics.java (286:294)

Code:
private static int getDeviceDensity() {
        // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
        // when running in the emulator, allowing for dynamic configurations.
        // The reason for this is that ro.sf.lcd_density is write-once and is
        // set by the init process when it parses build.prop before anything else.
        return SystemProperties.getInt("qemu.sf.lcd_density",
                SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));
    }
}

debug.sf.nobootanimation

platform_frameworks_base/cmds/bootanimation/bootanimation_main.cpp (45:49)
Code:
  char value[PROPERTY_VALUE_MAX];
    property_get("debug.sf.nobootanimation", value, "0");
    int noBootAnimation = atoi(value);
    ALOGI_IF(noBootAnimation, "boot animation disabled");

persist.adb.notify

Cyanogen: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (747:753)
Code:
 if (mAdbEnabled && mConnected) {
                if ("0".equals(SystemProperties.get("persist.adb.notify"))
                 || Settings.Secure.getInt(mContext.getContentResolver(),
                    Settings.Secure.ADB_NOTIFY, 1) == 0)
                    return;

AOSP: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (714:715)
Code:
            if (mAdbEnabled && mConnected) {
                if ("0".equals(SystemProperties.get("persist.adb.notify"))) return;

net.rmnet0.dns* and net.dns*

This is ok for Wifi and 2G/3G conection

wifi.supplicant_scan_interval

android_external_wpa_supplicant/wpa_supplicant.c (2459:2460)
Code:
if (property_get("wifi.supplicant_scan_interval", scan_prop, "5") != 0) {
wpa_s->scan_interval = (int)strtol(scan_prop, &endp, 0);

Valid entries only on CyanogenMod:

persist.sys.purgeable_assets
android_frameworks_base/core/jni/android/graphics/BitmapFactory.cpp (632:634)

Code:
char value[PROPERTY_VALUE_MAX];
    property_get("persist.sys.purgeable_assets", value, "0");
    mPurgeableAssets = atoi(value) == 1;

persist.sys.use_dithering
android_packages_app_CMParts/src/com/cyanogenmod/cmparts/activities/PerformancesettingsActivity.java (102)

Code:
String useDithering = SystemProperties.get(USE_DITHERING_PERSIST_PROP, USE_DITHERING_DEFAULT);

persist.sys.jit-mode (Only "fast" and "portable" modes)
android_packages_app_CMParts/src/com/cyanogenmod/cmparts/activities/PerformancesettingsActivity.java (96:99)

Code:
mJitPref = (CheckBoxPreference) prefSet.findPreference(JIT_PREF);
        String jitMode = SystemProperties.get(JIT_PERSIST_PROP,
                SystemProperties.get(JIT_PROP, JIT_ENABLED));
        mJitPref.setChecked(JIT_ENABLED.equals(jitMode));

pm.sleep_mode (Do not work on Non-MSM chipsets)
See sleep modes on device kernel in pm-data.c and pm.h

:highfive:

Some background info:

XLOUD, ClearAudio

If, and ONLY if your phone support xloud on stock ROM, is highly probable that this is ported for CyanogenMod and AOSP based roms, because these custom roms use proprietary drivers, firmwares, frameworks, app....

To enable, use this:

Code:
ro.semc.sound_effects_enabled=true
ro.semc.xloud.supported=true
persist.service.xloud.enable=1

The same is valid for ClearAudio. To enable use this:

Code:
ro.semc.sound_effects_enabled=true
ro.semc.clearaudio.supported=true
persist.service.clearaudio.enable=1
 
Last edited:

ShyPixie

Senior Member
Dec 19, 2012
55
261
São Paulo
lara.craft.net.br
Last edited:

broodplank1337

Inactive Recognized Developer
Nov 24, 2011
4,992
10,153
Nijmegen
www.broodplank.net
wow...I ve always wanted to do this resarch...but nerver had time

so all the "famous" build.prop tweaks are useless ????[

Yes they have been fake all the time, you might even get surprised when I tell you battery calibration is also totally bogus (it's for emulator only)
 

Crostantin

Senior Member
Dec 1, 2012
875
2,301
Rome
really?? I am surprise !!!!
You mean that i haven't to charge one for month from 0% to 100% and etc.......

If it's true a lot stuff I red about Lithium batteries make sense.....maybe
 

HTCDreamOn

Senior Member
Jun 17, 2012
1,069
1,351
@LaraCraft304 great guide, might want to mention the fact that those cyanogenmod specific changes can be found in performance settings anyway so although the build.prop lines would work, there is no need to use them.
 

upndwn4par

Inactive Recognized Developer
Jan 22, 2012
3,640
10,375
New Jersey

thewaywardgeek013

Senior Member
May 31, 2012
105
16
Your post looks eerily similar to Jeff Mixon's article.

http://www.jeffmixon.com/examining-build-prop-tweaks-for-android-ics-a-comprehensive-guide-part-1/

http://www.jeffmixon.com/examining-build-prop-tweaks-android-ics-comprehensive-guide-part-2/


And FYI, this is a Motorola build.prop tweak ("mot") that in fact works (or at least used to) on Motorola devices.

Code:
ro.mot.eri.losalert.delay
But not quite, as "pm.sleep_mode" was debunked at that blog post. Atleast here it is stated that it does something for Qualcomm/MSM Devices.
@LaraCraft304 - Kudos to your work!
 

Ryccardo

Senior Member
Nov 12, 2013
509
171
26
Imola
Are you sure that the various APP_ADJ weren't implemented in Gingerbread? I remember seeing them in Samsung stock firmwares (although commented)...
 

titooo7

Senior Member
Sep 29, 2010
1,687
4,466
London
In my opinion this is one of the most useful informative threads I have seen in a while. :)
I hope now everybody will realise that they have to be careful when reading the list of features of so many blazing fast and buttery smooth roms.

A lot of users and rom chefs use those build.prop tweaks just because everybody use them and because they have read tons of times that it improves the battery life, performance, etcetera. But the truth is that none of them checked or proved if those lines make a difference, so it's good to see that someone made research to prove that some of the most famouse buildprop tweaks are placebo effect. :)

I personally always wanted to understand what those "tweaks" exactly do and check if there is some kind of documentation that proves that it works before applying those changes to my phone. I wouldn't be surprised if the list of placebo effect tweaks gets bigger!
 

hillbeast

Inactive Recognized Developer
Feb 9, 2011
2,719
6,790
Dunedin
Sad part is that despite the build.prop tweaks being disproved, or rather most of them, it won't stop people from trying. Its the same as the Entropy generator thing we saw a while back. All these tweaks are pointless as if there was something you could change in terms of performance or battery then Google or the OEMs would have done it already.

Edit: should mention that when I was doing custom ROMs, the only tweaks I used where ones to the VM which I spent many countless hours investigating whether it improved or not, and the home screen lock (back when it did something).
 
Last edited:
  • Like
Reactions: TiMiN8R

Top Liked Posts

  • There are no posts matching your filters.
  • 164
    Tired of see so many "tweaks" that do not work, I decided to dig deeper.
    Scavenging the entire Android source, I checked entries which are actually valid.


    Note 1: Ignored the build.prop entries created by buildinfo.sh (default entries)

    Note 2: I'll update/upgrade the topic gradually.

    I accept all help, suggestions, observations, comments and so on.

    Entries that DO NOT exist in the source:
    (Again: I scaveged all Android source code)

    • ro.ril.disable.power.collapse
    • ro.mot.eri.losalert.delay
    • ro.config.hw_fast_dormancy
    • ro.config.hw_power_saving
    • windowsmgr.max_events_per_sec
    • persist.cust.tel.eons
    • ro.max.fling_velocity
    • ro.min.fling_velocity
    • ro.kernel.checkjni
    • dalvik.vm.verify-bytecode
    • debug.performance.tuning
    • video.accelerate.hw
    • ro.media.dec.jpeg.memcap
    • ro.config.nocheckin
    • profiler.force_disable_ulog
    • profiler.force_disable_err_rpt
    • ersist.sys.shutdown.mode
    • ro.HOME_APP_ADJ

    Notes:

    dalvik.vm.verify-bytecode
    • Previous version of the runtime supported the boolean
      dalvik.vm.verify-bytecode property, but that has been
      superceded by dalvik.vm.dexopt-flags.

    ro.kernel.checkjni
    • The correct entry is ro.kernel.android.checkjni

    ro.HOME_APP_ADJ
    • The interaction with this is been removed.
    • From google:
      This is a process holding the home application -- we want to try
      avoiding killing it, even if it would normally be in the background,
      because the user interacts with it so much.

    All ro.media.enc* entries
    • A more elegant alternative would be to edit /system/etc/media_profiles.xml

    Valid entries on CyanogenMod and AOSP:

    dalvik.vm.checkjni and ro.kernel.android.checkjni
    platform_frameworks_base/core/jni/AndroidRuntime.cpp (480:489/466:475)

    Code:
    property_get("dalvik.vm.checkjni", propBuf, "");
        if (strcmp(propBuf, "true") == 0) {
            checkJni = true;
        } else if (strcmp(propBuf, "false") != 0) {
            /* property is neither true nor false; fall back on kernel parameter */
            property_get("ro.kernel.android.checkjni", propBuf, "");
            if (propBuf[0] == '1') {
                checkJni = true;
            }
        }

    wifi.supplicant_scan_interval
    android_external_wpa_supplicant/wpa_supplicant.c (2459:2460)

    Code:
    if (property_get("wifi.supplicant_scan_interval", scan_prop, "5") != 0) {
        wpa_s->scan_interval = (int)strtol(scan_prop, &endp, 0);

    service.adb.tcp.port
    platform_system_core/adb/adb.c (1366:1372/1350:1356)

    Code:
    // If one of these properties is set, also listen on that port
    // If one of the properties isn't set and we couldn't listen on usb,
    // listen on the default port.
    property_get("service.adb.tcp.port", value, "");
    if (!value[0]) {
        property_get("persist.adb.tcp.port", value, "");
    }

    ro.sf.lcd_density and qemu.sf.lcd_density
    platform_frameworks_base/core/java/android/util/DisplayMetrics.java (286:294)

    Code:
    private static int getDeviceDensity() {
            // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
            // when running in the emulator, allowing for dynamic configurations.
            // The reason for this is that ro.sf.lcd_density is write-once and is
            // set by the init process when it parses build.prop before anything else.
            return SystemProperties.getInt("qemu.sf.lcd_density",
                    SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));
        }
    }

    debug.sf.nobootanimation

    platform_frameworks_base/cmds/bootanimation/bootanimation_main.cpp (45:49)
    Code:
      char value[PROPERTY_VALUE_MAX];
        property_get("debug.sf.nobootanimation", value, "0");
        int noBootAnimation = atoi(value);
        ALOGI_IF(noBootAnimation, "boot animation disabled");

    persist.adb.notify

    Cyanogen: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (747:753)
    Code:
     if (mAdbEnabled && mConnected) {
                    if ("0".equals(SystemProperties.get("persist.adb.notify"))
                     || Settings.Secure.getInt(mContext.getContentResolver(),
                        Settings.Secure.ADB_NOTIFY, 1) == 0)
                        return;

    AOSP: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (714:715)
    Code:
                if (mAdbEnabled && mConnected) {
                    if ("0".equals(SystemProperties.get("persist.adb.notify"))) return;

    net.rmnet0.dns* and net.dns*

    This is ok for Wifi and 2G/3G conection

    wifi.supplicant_scan_interval

    android_external_wpa_supplicant/wpa_supplicant.c (2459:2460)
    Code:
    if (property_get("wifi.supplicant_scan_interval", scan_prop, "5") != 0) {
    wpa_s->scan_interval = (int)strtol(scan_prop, &endp, 0);

    Valid entries only on CyanogenMod:

    persist.sys.purgeable_assets
    android_frameworks_base/core/jni/android/graphics/BitmapFactory.cpp (632:634)

    Code:
    char value[PROPERTY_VALUE_MAX];
        property_get("persist.sys.purgeable_assets", value, "0");
        mPurgeableAssets = atoi(value) == 1;

    persist.sys.use_dithering
    android_packages_app_CMParts/src/com/cyanogenmod/cmparts/activities/PerformancesettingsActivity.java (102)

    Code:
    String useDithering = SystemProperties.get(USE_DITHERING_PERSIST_PROP, USE_DITHERING_DEFAULT);

    persist.sys.jit-mode (Only "fast" and "portable" modes)
    android_packages_app_CMParts/src/com/cyanogenmod/cmparts/activities/PerformancesettingsActivity.java (96:99)

    Code:
    mJitPref = (CheckBoxPreference) prefSet.findPreference(JIT_PREF);
            String jitMode = SystemProperties.get(JIT_PERSIST_PROP,
                    SystemProperties.get(JIT_PROP, JIT_ENABLED));
            mJitPref.setChecked(JIT_ENABLED.equals(jitMode));

    pm.sleep_mode (Do not work on Non-MSM chipsets)
    See sleep modes on device kernel in pm-data.c and pm.h

    :highfive:

    Some background info:

    XLOUD, ClearAudio

    If, and ONLY if your phone support xloud on stock ROM, is highly probable that this is ported for CyanogenMod and AOSP based roms, because these custom roms use proprietary drivers, firmwares, frameworks, app....

    To enable, use this:

    Code:
    ro.semc.sound_effects_enabled=true
    ro.semc.xloud.supported=true
    persist.service.xloud.enable=1

    The same is valid for ClearAudio. To enable use this:

    Code:
    ro.semc.sound_effects_enabled=true
    ro.semc.clearaudio.supported=true
    persist.service.clearaudio.enable=1
    12
    wow...I ve always wanted to do this resarch...but nerver had time

    so all the "famous" build.prop tweaks are useless ????[

    Yes they have been fake all the time, you might even get surprised when I tell you battery calibration is also totally bogus (it's for emulator only)
    8
    What about the xBlast Tools build.prop tweaks of Xposed Framework?
    Do they work for real or are they just a lot of nonsense code?

    1) Disable boot animation -> debug.sf.nobootanimation

    This is ok for AOSP and CyanogenMod, can be found here:

    platform_frameworks_base/cmds/bootanimation/bootanimation_main.cpp (45:49)
    Code:
      char value[PROPERTY_VALUE_MAX];
        property_get("debug.sf.nobootanimation", value, "0");
        int noBootAnimation = atoi(value);
        ALOGI_IF(noBootAnimation, "boot animation disabled");

    2) Hide adb notification -> persist.adb.notify

    This is ok for AOSP and CyanogenMod, can be found here:

    Cyanogen: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (747:753)
    Code:
     if (mAdbEnabled && mConnected) {
                    if ("0".equals(SystemProperties.get("persist.adb.notify"))
                     || Settings.Secure.getInt(mContext.getContentResolver(),
                        Settings.Secure.ADB_NOTIFY, 1) == 0)
                        return;

    AOSP: android_frameworks_base/services/java/com/android/server/usb/UsbDeviceManager.java (714:715)
    Code:
                if (mAdbEnabled && mConnected) {
                    if ("0".equals(SystemProperties.get("persist.adb.notify"))) return;

    3) Audio & video hack -> ro.media.enc*, ro.media.dec*, ro.media.panorama*

    This changes some properties to try get a better quality... the values exists in source, but not always work as expected.
    As I said in the original thread, a more elegant alternative would be to edit /system/etc/media_profiles.xml

    4) Google Dns Hack -> net.rmnet0.dns* & net.dns*

    This is ok for Wifi and 2G/3G conection with google dns (8.8.8.8, 8.8.4.4)

    5) Wifi scan interval -> wifi.supplicant_scan_interval

    This is ok for AOSP and CyanogenMod, can be found here:

    android_external_wpa_supplicant/wpa_supplicant.c (2459:2460)
    Code:
    if (property_get("wifi.supplicant_scan_interval", scan_prop, "5") != 0) {
    wpa_s->scan_interval = (int)strtol(scan_prop, &endp, 0);

    6) Max events per sec -> windowsmgr.max_events_per_sec

    This not exists in source.

    ------

    I see the others soon ...


    Yes, work. Can also be accessed through development menu.
    4
    yeah, I was surprised when I found out that lots of those tweaks were fake, I thought XDA folks knew better than that. I think the main reason people think they work is that to apply them you have to reboot your device, and EVERY device feels snappier after rebooting.
    4
    Your post looks eerily similar to Jeff Mixon's article.

    http://www.jeffmixon.com/examining-build-prop-tweaks-for-android-ics-a-comprehensive-guide-part-1/

    http://www.jeffmixon.com/examining-build-prop-tweaks-android-ics-comprehensive-guide-part-2/


    And FYI, this is a Motorola build.prop tweak ("mot") that in fact works (or at least used to) on Motorola devices.

    Code:
    ro.mot.eri.losalert.delay