6

How do I get the build.prop values that are found in /system/build.prop without root access? How do I edit them?

1

8 Answers 8

10

You can probably consider using SystemProperties.get("someKey") as suggested by @kangear in your application using reflection like:

public String getSystemProperty(String key) {
    String value = null;

    try {
        value = (String) Class.forName("android.os.SystemProperties")
                .getMethod("get", String.class).invoke(null, key);
    } catch (Exception e) {
      e.printStackTrace();
    }

    return value;
}

And then you can use it any where like:

getSystemProperty("someKey");
Sign up to request clarification or add additional context in comments.

Comments

5

Try This

static String GetFromBuildProp(String PropKey) {
    Process p;
    String propvalue = "";
    try {
        p = new ProcessBuilder("/system/bin/getprop", PropKey).redirectErrorStream(true).start();
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            propvalue = line;
        }
        p.destroy();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return propvalue;
}

Comments

3

Does System.getProperty() help? As an alternative, you can execute getprop in a Process and retrieve its output.

4 Comments

Not sure... it does not retrieve properties in my /system/build.prop.
Do you see the property when you do adb shell getprop on the command prompt?
@BinoyBabu, As an alternative, you can execute getprop in a Process and get retrieve its output.
Thats exactly what I'm doing. Thanks
3

Such as: SystemProperties.get("ro.rksdk.version")

2 Comments

Not seeing any such object!
This is rather for AOSP development than normal app development. Just import android.os.SystemProperties.
2

use android.os.Build class, see http://developer.android.com/reference/android/os/Build.html, but you can not edit it without root access.

Comments

2

I have checked multiple devices including some Samsung and LG devices as well as a Nexus 4, latest one was the Nvidia Shield Tablet with Android 6.0. On all devices ll on /system/build.prop gave me this result(of course with varying size and date of build.prop):

-rw-r--r-- root root 3069 2015-10-13 21:48 build.prop

This means that anyone and any app without any permissions can read the file. Root would only be required for writing the non "ro."-values. You could just create a new BufferedReader(new FileReader("/system/build.prop")) and read all lines.

Advantages of this approach:

  • no need for reflection (SystemProperties.get)
  • no need to spawn a Process and executing getprop

Disadvantages:

  • does not contain all system properties (some values e.g. are set at boot only available at runtime)
  • not handy for getting a specific value compared to SystemProperties.get

Comments

1

On the setting page of your file manager, set home as /system, then you could browse system folders and copy build.prop and paste to sdcard. I'm still trying to root my phone but I have no problem tweaking on the way (no pun).

Comments

1

To read properties using reflection on the hidden API :

static public String getprop(String key){
    try { Class c = Class.forName("android.os.SystemProperties");
        try { Method method = c.getDeclaredMethod("get", String.class);
            try { return (String) method.invoke(null, key);
            }  catch (IllegalAccessException e) {e.printStackTrace();}
            catch (InvocationTargetException e) {e.printStackTrace();}
        } catch (NoSuchMethodException e) {e.printStackTrace();}
    } catch (ClassNotFoundException e) {e.printStackTrace();}
    return null;
}

To edit them (Root required) manually, you should extract them with adb :

adb pull /system/build.prop

Edit them on the computer, then "install" the new build.prop :

adb push build.prop /sdcard/
adb shell
    mount -o rw,remount -t rootfs /system
    cp /sdcard/build.prop /system/
    chmod 644 /system/build.prop

Would be safer to keep an original build.prop copy.

2 Comments

Can you expand your comment on how to use reflection in this particular case?
SystemProperties.get() isn't accessible like other method, it has been hidden. In order to "unhide it", we must cast a neutral Class with Class.forName("android.os.SystemProperties"), extract it's method and invoke it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.