Cargador de clases personalizado para android?

Estoy escribiendo una biblioteca de instrumentación que me gustaría trabajar en escritorio y móvil (Android).

Funciona por:

  1. Exponiendo un main que toma un solo parámetro, el principal de la clase target
  2. Instalar un cargador de clases que intercepta todas las clases a medida que se cargan y los instrumentos de ellos

Al igual que:

// Expects args[0] to contain the name of the INNER main public static void main(String[] args) throws Throwable { String className = args[0]; String [] newArgs = new String[0]; if(args.length > 1) { newArgs = Arrays.copyOfRange(args, 1, args.length-1); } System.out.println("Bootstrapping " + className); Loader s = new Loader(ClassLoader.getSystemClassLoader().getParent()); Class<?> c = s.loadClass(className); c.getDeclaredMethod("main", new Class[] { String[].class }).invoke( null, new Object[] { newArgs }); } 

La pregunta es la siguiente:

¿Cómo puedo hacer aproximadamente lo mismo para una aplicación para Android?

Una idea es modificar el manifiesto android para sustituir las actividades existentes por actividades "wrapper", que luego instalan cargadores de clases y llaman a la actividad subyacente original. ¿Hay una mejor manera?

Hay un proyecto llamado droidbox para detectar malware android. Hay un código que puede ayudarte mucho.

 package com.loader; import dalvik.system.DexClassLoader; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class LoaderActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DexClassLoader dLoader = new DexClassLoader("/sdcard/DroidBoxTests.apk","/sdcard/", null, ClassLoader.getSystemClassLoader().getParent()); Class calledClass = null; try { calledClass = dLoader.loadClass("droidbox.tests.DroidBoxTests"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Intent it=new Intent(this, calledClass); it.setClassName("droidbox.tests", "droidbox.tests.DroidBoxTests"); startActivity(it); } } 
  • Instancia de clase abstracta con constructor oculto
  • Java / Android Método de llamada desde cadena WITH Value
  • Clase personalizada que carga / reemplaza las clases nativas de Android
  • Cómo moverse repetición similar-variable en declaraciones if
  • Confirmación de mi comprensión del principio de Android Concept (uso de múltiples actividades)
  • ¿Cómo obtengo el nombre del método dentro de ese método?
  • BackupAgent compatible con versiones anteriores
  • Field.getGenericType () devuelve la instancia de java.lang.Class en lugar de Type
  • Reglas de ProGuard para la reflexión de Kotlin
  • Error de método de reflexión de Android
  • Proguard y reflexión en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.