¡Sin más preámbulos, comencemos …!
PASO – 1: Abra Android Studio
Si no lo tiene, puede descargarlo desde aquí: enlace.
PASO – 2: Selección de actividad
Cree un nuevo proyecto de Android Studio. (Ver imagen a continuación)
Mantengo este tutorial simple, no necesitamos crear ninguna actividad ya que solo estamos cambiando el color del reloj de la barra de estado.
Seleccione Sin actividad y vaya a Siguiente.
PASO – 3: Configuración del proyecto
Especifique el nombre y el nombre del paquete para su aplicación. Mantenga el lenguaje como Java, si está familiarizado con Kotlin, siga con eso; no habrá mucha codificación dura, ya que es una especie de desarrollo de módulo / aplicación de ‘hola mundo’.
Estoy manteniendo la API mínima nivel a 15.
Luego presione el botón Finalizar.
PASO – 4: Modifique su build.gradle (aplicación) & Agregue las siguientes dependencias:
Luego, sincronice el proyecto.
PASO – 5: Modifique su archivo manifest.xml:
Agregue las siguientes etiquetas de metadatos dentro de la etiqueta de la aplicación:
El nombre debe ser xposedmodule
y el valor true
. Deja el recurso vacío. Luego, repita lo mismo para xposedminversion
(la versión de API del paso anterior) y xposeddescription
(una descripción muy breve de su módulo).
PASO – 6: Cree una clase:
package com.myfirstxposedmodule;
public class MyModule {
}
Esta es nuestra clase que modificaremos en el futuro.
PASO – 7: Cree y modifique el archivo xposed_init:
Cambie la vista del directorio a la vista Proyecto. Vaya a la aplicación > src > principal. Haga clic con el botón derecho en el directorio principal y seleccione un nuevo > directorio.
Nómbrelo: assets
Haga clic con el botón derecho en el directorio assets
creado recientemente, seleccione el nuevo > archivo.
Nómbrelo: xposed_init
(seleccione text
si solicita el tipo de archivo).
Dentro del archivo xposed_init
, agregue el nombre completo de nuestra clase de Java. es decir, en nuestro caso, será como:
com.myfirstxposedmodule.MyModule
Así es como el framework Xposed identificará nuestro módulo y lo cargará en el arranque. Este archivo le dirá al framework qué clases cargar, lo cual también veremos en los registros.
PASO – 8: Modificar la clase MyModule:
package com.myfirstxposedmodule;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XposedBridge;
public class MyModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
}
}
Implemente IXposedHookLoadPackage
e implemente el método handleLoadPackage
como se muestra arriba.
Ahora, probemos poniendo una función de registro dentro de ese método handleLoadPackage
:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Esto imprimirá los módulos cargados. Por lo general, estos registros se registran dentro de este archivo: /data/data/de.robv.android.exposed.installer/log/debug.log
(al que se puede acceder fácilmente a través del instalador Xposed).
PASO – 9: Ejecute el código:
Si intenta directamente ejecute esto desde el estudio de Android, obtendrá este error. Lo cual está bien porque no tenemos ninguna actividad en este momento.
De todos modos, no se preocupe, estoy teniendo una solución. Simplemente edite la configuración Ejecutar y cambie la opción de lanzamiento de Actividad predeterminada a Nada y seleccione Aceptar.
Ahora, vuelva a intentar ejecutar (Windows: Shift + F10).
Si se ejecuta correctamente en su dispositivo, Podrás ver este módulo en la lista de módulos de la aplicación Xposed Installer. Como se muestra en la siguiente imagen, también puede ver el texto de descripción que habíamos ingresado en el archivo de manifiesto.
Simplemente, active ese módulo marcando la casilla y reinicie su dispositivo.Después de reiniciar, abra la aplicación Xposed Installer y abra los registros (también puede abrir el archivo de registro que mencioné anteriormente, es la ruta). Verá líneas como esta:
Ahora que sabe cómo crear y ejecutar el módulo Xposed, podemos profundizar más para ver el código de la barra de estado y aplicar algunas de nuestras propias implementaciones.
PASO – 10: Profundizando en el código de la barra de estado:
Ahora, estamos interesados en obtener el reloj (texto) de la barra de estado (que reside en com.android.systemui
paquete). Como saben, Android es una fuente operativa de código abierto, por lo que puede ver el contenido interno del código. Puede descargar el código fuente de Android desde ESTE enlace. Dependiendo de su versión de Android y su rom, puede haber algunos cambios. A partir de ahora, solo nos interesa encontrar el código de nuestro reloj. Hay una clase Clock.java
dentro en algún lugar del paquete com.android.systemui
y esta clase se extiende TextView
, lo que significa que puede tratar esto de manera similar como un TextView. ESTE es el enlace a esa clase. Hay un método que actualiza la hora en la barra de estado cuyo nombre es updateClock()
. Mire el fragmento de abajo:
Ahora, ¿qué queremos? Queremos ejecutar nuestro código cada vez que se ejecute este método. Lo que haremos en el siguiente paso, que también se conoce como enganchar un método.
PASO – 11: Enganchar el método:
El XposedHelper
es una clase que proporciona algunos métodos auxiliares. Un método auxiliar que necesitaremos es findAndHookMethod
que toma el nombre de clase completo en String
, cargador de clases (podemos obtenerlo de XC_LoadPackage.LoadPackageParam
de handleLoadPackage
), el nombre del método que queremos rastrear (updateClock
en nuestro caso) en String
y XC_MethodHook
devolución de llamada (que es simplemente una devolución de llamada). A continuación estará nuestro código
En el código anterior, puede ver que hay dos métodos que he implementado en la clase anónima XC_MethodHook
que son beforeHookedMethod
y afterHookedMethod
. Como sugiere el nombre, el primero se ejecutará antes del método enganchado y el último se ejecutará después del método enganchado (updateClock
en nuestro caso). Los parámetros para argumentos y tipos de retorno son manejados por el argumento MethodHookParam
. Pero a partir de ahora, solo queremos cambiar el color del reloj de la barra de estado, simplemente necesitaremos afterHookedMethod
.
Necesitaremos acceso a ese TextView
objeto, que podemos obtener de param.thisObject
; será lo mismo que this
palabra clave en Clock.java
clase. Luego, podemos convertirlo en TextView
y luego podemos simplemente cambiar el color de ese objeto TextView
y también podemos modificar el texto como lo hice yo. :
PASO – 12: Ejecute el módulo:
Ejecute el código y reinicie nuevamente su dispositivo. Podrás ver tu reloj en rojo y el texto emoji que agregamos.
¡¡Eso es !! ¡Sé que reiniciar apesta! pero bueno, has creado tu propio módulo Xposed, ¿¡¿no es genial ?? !!