Acceda al servicio de marco de Android desde Dalvik VM

¿Es posible acceder a un servicio de Android en el marco de la máquina virtual Dalvik?

Quiero hacer modificaciones en algunas clases de la máquina virtual Dalvik (por ejemplo, clases libcore/luni) y quiero obtener un resultado de un servicio (con una base de datos y otras operaciones).

¿Es esto posible?

preguntado el 31 de julio de 12 a las 12:07

1 Respuestas

Tenga en cuenta que el marco no se ejecutará/configurará en todos los contextos posibles en los que se ejecuta Dalvik.

Dicho esto, como un truco rápido, es posible que pueda usar la reflexión para obtener clases de marco.

Sin embargo, la forma correcta sería definir una API en el núcleo de Dalvik, que consiste en algo así como una interfaz y un método estático, donde el método estático registra una instancia de la interfaz para que la use la biblioteca central. Luego, en el marco, agregue código para llamar a esa función de registro. Algo como esto (muy simplificado aquí, por ejemplo, desea verificaciones de error/permiso):

En libcore:

public interface TheInterface {
    void doSomethingInteresting();
    ...
}

public class TheRegistrar {
    private static TheInterface theOne;

    public static void register(TheInterface instance) {
        theOne = instance;
    }

    public static TheInterface get() {
        return theOne;
    }
}

Luego, en el código libcore que quiere usar esto, pídale que haga una get() (y estar preparado para tratar con el caso donde es null).

Y en el marco, define algo como:

public class FrameworkDoohicky implements TheInterface {
    ...
}

y registrarlo con una llamada a TheRegistrar.register() durante la inicialización del marco.

Respondido 31 Jul 12, 22:07

¡Gracias por tu respuesta! ¿También es posible iniciar una actividad desde esta capa baja (el dalvik vm)? Quiero abrir un cuadro de diálogo de contraseña antes de leer un archivo, por ejemplo. - usuario1565586

Misma respuesta. Si el marco realmente se está ejecutando, debería poder conectarlo. - danfuzz

Hola @danfuzz. ¿Podría explicar la última parte de su respuesta? En particular, no entiendo dónde debo llamar a TheRegistrar.register(). ¿Podría explicar dónde se produce la inicialización del marco para cada proceso? - Yury

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.