本文原做者 長鳴鳥 ,未經贊成,轉載不帶名的嚴重鄙視。
Systemproperties的做用就不說了,先簡述一下其用法:java
SystemProperties.set("persist.sys.enable","true");//將persist.sys.enable的值設置爲true SystemProperties.get("persist.sys.enable","false");//獲取persist.sys.enable的值,若是獲取不到,以「false」做爲默認值
若是想獲得一個bool值,能夠用:android
SystemProperties.getBoolean("persist.sys.enable",false);
其餘相似。shell
不過在這以前,應將該應用調爲系統級別應用。
AndroidManifest.xml:app
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.setupwizard" android:versionCode="01080000" android:versionName="1.0" +android:sharedUserId="android.uid.system">
但這隻適用於Android Source的開發者,普通app開發只能使用反射方法。
谷歌反對這種用法,但存在即合理,下面是我寫的一個示例,能夠直接拿去用,不謝:ui
package com.android.xxx; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.content.Context; import android.net.ConnectivityManager; public class SysProp { private static Method sysPropGet; private static Method sysPropSet; private SysProp() { } static { try { Class<?> S = Class.forName("android.os.SystemProperties"); Method M[] = S.getMethods(); for (Method m : M) { String n = m.getName(); if (n.equals("get")) { sysPropGet = m; } else if (n.equals("set")) { sysPropSet = m; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static String get(String name, String default_value) { try { return (String) sysPropGet.invoke(null, name, default_value); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return default_value; } public static void set(String name, String value) { try { sysPropSet.invoke(null, name, value); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
本文原做者 長鳴鳥 ,未經贊成,轉載不帶名的嚴重鄙視。
能夠經過命令adb shell :.net
getprop查看設備上全部屬性狀態值。 或者 getprop XX.XX查看某個屬性狀態 使用setprop XX.XX yy 設置某個屬性的狀態
下面問題來了,若是我要新增一個屬性persist.backdata.enable怎麼辦?
按照正常思路,應該是SystemProperties.set("persist.backdata.enable","false");
惋惜這個命名不符規則。
編譯不會出錯,但什麼也寫不進去,固然也讀不出來。
咱們的方法沒有錯,錯的是規則,那麼咱們就來修改規則。
打開external/sepolicy/property_contexts,加上一句:code
@@ -56,6 +56,7 @@ persist.sys. u:object_r:system_prop:s0 persist.service. u:object_r:system_prop:s0 persist.service.bdroid. u:object_r:bluetooth_prop:s0 persist.security. u:object_r:system_prop:s0 +persist.backdata. u:object_r:system_prop:s0
整編系統後就能夠正常使用persist.backdata.*
本文原做者 長鳴鳥 ,未經贊成,轉載不帶名的嚴重鄙視。
That's all.xml