Estoy tratando de hacer algo similar a este stackoverflow posting. Lo que quiero hacer es leer la definición de una actividad o servicio de la tarjeta SD. Para evitar problemas de permiso manifiesto, creo una versión de shell de esta actividad en .apk, pero intento reemplazarla con una actividad del mismo nombre que reside en la tarjeta SD en tiempo de ejecución. Desafortunadamente, puedo cargar la definición de clase de actividad de la tarjeta SD usando DexClassLoader, pero la definición de clase original es la que se ejecuta. ¿Hay alguna forma de especificar que la nueva definición de clase sustituya a la anterior o cualquier sugerencia sobre cómo evitar los problemas de permiso manifiesto sin proporcionar realmente la actividad necesaria en el paquete? El ejemplo de código:Android, cómo usar DexClassLoader para reemplazar dinámicamente una actividad o servicio
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
Intead de poner en marcha el com.android.my.path.to.a.loaded.activity
especificado en /sdcard/mypath/My.apk
, se pone en marcha la actividad estáticamente cargado en el proyecto.
Tengo la sensación de que esto no se puede hacer simplemente por la forma en que Android maneja los activos. Si llama a startActivity en una clase en otra aplicación, debería cargar el hilo de esa aplicación que no sea el suyo y, por lo tanto, simplemente una alternativa peligrosa a las Intenciones de Android. – Tom