Habilidades de depuración del valor de la propiedad del sistema de configuración del sistema Android

Los valores de atributo del sistema Android generalmente se dividen en dos tipos: prop y configuración.

uno, apoyo

Hay varios tipos de accesorios, uno viene con el sistema y el otro lo definimos nosotros mismos.

1. El sistema viene con

En general, estos accesorios terminarán en el archivo build.prop del sistema:

/default.prop
/system/build.prop
/system/default.prop (este archivo no necesariamente existe) Varias secuencias de comandos en el directorio
/data/local.prop /data/property

Los atributos que comienzan con ro son todos atributos de solo lectura. Dado que el atributo ro no se puede cambiar, por ejemplo, /default.prop no se puede editar directamente. Incluso si se modifica y reinicia, se restaurará; entonces, ¿cómo modificar el atributo ro? La forma convencional es modificar el código fuente y volver a grabar el firmware. De una manera elegante, no hay necesidad de grabar el firmware y se puede usar mpro para modificarlo a través de la inyección de procesos.

Las propiedades que comienzan con persistente generalmente se cargan desde el directorio /data/property.

2. Defínelo tú mismo

La inicialización de prop está en el archivo mk debajo del dispositivo, usando PRODUCT_PROPERTY_OVERRIDES para la configuración

例如(rk3568):
device/rockchip/rk356x/device.mk文件下

PRODUCT_PROPERTY_OVERRIDES += \
    ro.sf.hwrotation=0 \
    ro.sf.lcd_density=160

3. Tres formas de configurar la utilería

  • shell: (use directamente el archivo bin)

    getprop key //obtener valor de estado
    setprop key value //establecer valor de estado

  • Java: (usando API)

    SystemProperties.get(clave,valorpredeterminado);
    SystemProperties.set(clave,valor);

  • C/C++: (usando API)

    getProperty(clave, valor predeterminado)
    setProperty(clave, valor)

4. Permisos

Solo después de que se pasa el permiso, se puede configurar y obtener no tiene verificación de permiso.

if (uid == AID_SYSTEM || uid == AID_ROOT)
    return check_control_mac_perms(name, sctx);

Cuando SELinux está habilitado, se realizarán verificaciones de permisos en cada clave.

system/sepolicy:grep -rn ro.serialno
private/property_contexts:66:ro.serialno    u:object_r:serialno_prop:s0

system/sepolicy:grep -rn serialno_prop
private/adbd.te:68:get_prop(adbd, serialno_prop
public/shell.te:85:get_prop(shell, serialno_prop)
private/system_server.te:534:get_prop(system_server, serialno_prop)
...

dos, ajustes

1. Cómo usar la configuración

inserte la descripción de la imagen aquí

Cuando operamos un determinado interruptor de SystemUI y Settings, ¿cómo consultar qué clave se ha modificado?

lista de configuración sistema > 1 && lista de configuración segura >> 1 && lista de configuración global >> 1
lista de configuración sistema > 2 && lista de configuración segura >> 2 && lista de configuración global >> 2
diff 1 2
inserte la descripción de la imagen aquí

3. Busque la clave en el código fuente

frameworks/base$ grep -rn "airplane_mode_on"

inserte la descripción de la imagen aquí
Los tres archivos aquí muestran cómo inicializar una clave cuando el dispositivo se enciende por primera vez.

4. Si no hay un valor predeterminado predeterminado, puede consultar el espacio de nombres al que pertenece la clave de la siguiente manera

inserte la descripción de la imagen aquí

5. Si necesita restablecer la clave cada vez que enciende la máquina, obviamente el método anterior no es aceptable, consulte el siguiente código:

  • método uno:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
public void start(){
    
    
         ...
 +        Settings.System.putInt(mContext.getContentResolver(),
 +                                Settings.System.AIRPLANE_MODE_ON, 1);
}
  • Método 2:
diff --git a/device/rockchip/rk356x/init.rk356x.rc b/device/rockchip/rk356x/init.rk356x.rc
index 3ac764c0b3..bca54d8d35 100644
--- a/device/rockchip/rk356x/init.rk356x.rc
+++ b/device/rockchip/rk356x/init.rk356x.rc
@@ -6,6 +6,7 @@ on property:sys.boot_completed=1
     chmod 0664 /sys/class/devfreq/ff400000.gpu/governor
     chmod 0664 /sys/class/devfreq/ff400000.gpu/min_freq
     chmod 0664 /sys/class/devfreq/ff400000.gpu/max_freq
 +    settings put system airplane_mode_on 1

Los comandos complejos se pueden procesar usando scripts de shell

+service testsh /vendor/bin/test.sh
+oneshot
+
+on property:sys.boot_completed=1
+start testsh

Supongo que te gusta

Origin blog.csdn.net/weixin_45639314/article/details/131552147
Recomendado
Clasificación