参考文章
https://www.cnblogs.com/PeakerChen/p/5024186.html(修改SystemProperties)
参考:https://blog.csdn.net/yin1031468524/article/details/67640786
参考:https://blog.csdn.net/yangwen123/article/details/8936555
参考:https://www.jianshu.com/p/a9eeeb3f1c45
修改SystemProperties属性 可以修改诸如Build.MODEL等变量的值,是直接修改到共享内存的部位。
所以如果这个地方被修改,基本无法验证真假。
1、Init进程中 加载系统属性
//system/core/rootdir/init.rc
on property:sys.boot_from_charger_mode=1
trigger late-init
当属性值sys.boot_from_charger_mode为1时,会触发late-init,在late-init又会触发load_system_props_action和load_persist_props_action,具体看看property_service.cpp这两个方法对应干啥了
//system/core/init/property_service.cpp
void load_system_props() {
load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);//加载system/build.prop
load_properties_from_file(PROP_PATH_VENDOR_BUILD, NULL);//加载vendor/build.prop
load_properties_from_file(PROP_PATH_FACTORY, "ro.*");//加载factory/factory.prop
load_recovery_id_prop();//加载recovery相关prop
}
void load_persist_props(void) {
load_override_properties();//如果"ro.debuggable"为1加载data/local.prop里的属性
/* Read persistent properties after all default values have been loaded. */
load_persistent_properties();//加载/data/property里的persistent properties
}
/ default.prop
/system/build.prop
/system/default.prop
/data/local.prop
当同一属性在多个文件中都有配置,先加载的会被后加载的覆盖。
2、SystemProperties set流程图
image.png
3、属性系统的框架,如下图:
image利用系统属性动态设置程序中Log的开关
android 动态控制logcat日志开关,通过Log.isLoggable(TAG,level)方法动态控制,以FlashlightController类为例
private static final String TAG = "FlashlightController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
利用adb命令设置属性值来控制该日志开关
adb shell setprop log.tag.FlashlightController DEBUG 设置该TAG的输出级别为DEBUG,则 level为DEBUG以上的都返回true
需要注意的是通过adb shell setprop设置的属性值每次重启后都会恢复之前的值,log的级别如下:
where <tag> is a log component tag (or * for all) and priority is:
V Verbose (default for <tag>)
D Debug (default for '*')
I Info
W Warn
E Error
F Fatal
S Silent (suppress all output)
也可以将该属性添加在data/local.prop属性文件中,不同的是只要存在local.prop,该手机重启与否属性值都存在,另外需要注意的是user版ro.debuggable=0,系统启动时不会读取/data/local.prop文件
网友评论