¿Cómo escribir un script que elimine un determinado conjunto de aplicaciones cada vez que actualiza un archivo de actualización?

Ejecuto un dispositivo LineageOS con MicroG, pero dado que la aplicación de mensajería predeterminada no se puede desactivar, necesito eliminarla cada vez que actualizo un archivo. Esto se está volviendo cada vez más tedioso a medida que aumentan las aplicaciones que necesito eliminar en la actualización.

¿Cómo escribe un script que elimine estas aplicaciones cada vez que flashea para que los cambios de eliminación persistan? Algo así como addon.d pero eso es para hacer copias de seguridad de las aplicaciones.

Editar: Ambas respuestas son correctas, la que publiqué y la de Death Mask Salesman. Acepté el de Death Mask Salesman porque es relevante para la pregunta, sin embargo, el que publiqué resolvió mi problema.

Llegué un poco tarde a la fiesta, pero los scripts addon.d no son solo para fines de respaldo. Suponiendo que la aplicación que desea eliminar sea, por ejemplo, AudioFX, podría escribir un script de este tipo que se ejecute rm -rfen /system/priv-app/AudioFX. Esto eliminaría AudioFX cada vez que muestre una OTA.
¡Gracias Kuo! He arreglado el formato y le di un pulgar hacia arriba. Limpiará los comentarios ahora. Sin embargo, considere echar un vistazo a Adebar , encontrará algunos otros aspectos interesantes (como la documentación del dispositivo o los scripts de respaldo que genera).
@DeathMaskSalesman ¿Cómo escribirías algo así? Probé algunas opciones, pero no puedo hacerlo bien, finalmente me rendí y las eliminé manualmente.
@Izzy ¡Le echaré un vistazo más! Con toda honestidad, cuando lo miré por primera vez, me abrumó.
@KuoChongYii Escribiré una respuesta a su debido tiempo.

Respuestas (2)

Como alternativa a la otra respuesta, traigo un enfoque más definitivo, basado addon.dy dirigido a la eliminación de aplicaciones del sistema.

Recuerde que, a diferencia del pmmétodo basado, que se puede revertir a voluntad, las aplicaciones eliminadas con este enfoque solo se pueden volver a obtener comentando las líneas correspondientes en el script de debloater y volviendo a aplicar la actualización OTA.


Introducción

Cualquier script de shell en el /system/addon.ddirectorio se ejecuta justo después de que se haya aplicado una actualización OTA. El orden de ejecución depende del número entero al comienzo del nombre de un archivo, ya que los scripts se evalúan en orden creciente.


El código

La eliminación de una aplicación del sistema es simplemente cuestión de publicarla rm -rfen el directorio principal de la aplicación. Así podemos escribir un script para que estas eliminaciones se realicen sin problemas después de cada actualización.

Si, por ejemplo, queremos eliminar la Emailaplicación estándar, nuestro script se verá así

#!/sbin/sh

rm -rf "/system/app/Email"

Aquí, #!/sbin/shhay una línea obligatoria que le indica a TWRP qué programa evaluará el script. No lo quites.

rm -rfes un comando que se utiliza para eliminar a la fuerza lo que le sigue de forma recursiva. Por lo tanto, rm -rf "/system/app/Email"elimina el /system/app/Emaildirectorio y todo lo que contiene, eliminando así la aplicación de correo electrónico por completo.

Para agregar más aplicaciones a la lista, simplemente agregue más rm -rfdeclaraciones como en el ejemplo, reemplazándolas /system/app/Emailcon la ruta de la aplicación que desea eliminar.


finalizando

Una vez que haya terminado de escribir el script, deberá copiarlo en un archivo /system/addon.d. Para ser ejecutado, su nombre debe comenzar con un número entero, seguido de un guión. Por el bien de esta respuesta, lo llamaré 99-debloat.sh, lo que hace que se evalúe después de los otros scripts adicionales.

Después de eso, es probable que deba cambiar los permisos y la propiedad del script. Para cambiar los permisos, utilice

chmod 755 /system/addon.d/99-debloat.sh

Para modificar la propiedad, utilice

chown 0.0 /system/addon.d/99-debloat.sh

Un ejemplo completo

El método descrito en esta respuesta es el que yo mismo uso; Agregaré mi 99-debloat.shscript personal aquí como referencia.

#!/sbin/sh

app="/system/app"
priv_app="/system/priv-app"

rm -rf $app/Calendar
rm -rf $app/Email
rm -rf $app/FM2
rm -rf $app/PicoTts
rm -rf $app/Stk
rm -rf $priv_app/FlipFlap
rm -rf $priv_app/Gallery2
rm -rf $priv_app/Snap
rm -rf $priv_app/WeatherProvider
Eso es tan simple. Pensé que addon.d solo toma un formato de código específico, no un script de shell normal. Esto es útil. ¡Gracias por su ayuda!
@KuoChongYii Ambos scripts addon e init son shell; solo tenga cuidado de que el intérprete sea /sbin/shy no algo así como /system/bin/sh.
¿Cuál es la diferencia entre ambos? ¿Sh binary en el sistema es una compilación diferente de un sh binary en sbin?
@KuoChongYii Cuando se inicia en TWRP, /sbin/shes el proporcionado por TWRP en sí: los scripts adicionales lo usan porque está garantizado que siempre estará disponible, mientras que el otro sh podría no existir si /systemestá vacío. /system/bin/shes el binario sh proporcionado por Android; a diferencia de lo que dije erróneamente anteriormente, que sh es el que se usa en los scripts init.d porque /sbin/shno está disponible cuando se inicia Android.
Ah, ya entiendo.

Intenté pm disable <app>, pm hide <app>y pm block <app>, pero todos arrojaron mensajes de error. Pero cuando lo probé, pm disable-user <app>¡funciona! Y los cambios persisten después de volver a flashear, ¡eso es genial! ¡No necesito escribir un guión después de todo!