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
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
3. Busque la clave en el código fuente
frameworks/base$ grep -rn "airplane_mode_on"
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
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