Вызов метода из стороннего *.apk файла

  1. public Object callMethod(String pathToApk, String absClassName, String methodName, Object[] params) {
  2.     DexClassLoader dLoader = new DexClassLoader(pathToApk, getApplicationContext().getApplicationInfo().dataDir, null, ClassLoader.getSystemClassLoader().getParent());
  3.     Class c = null;
  4.     try {
  5.         c = dLoader.loadClass(absClassName);
  6.     } catch (ClassNotFoundException e) {
  7.             e.printStackTrace();
  8.     }
  9.     try {
  10.         int len = params.length;
  11.         Class[] cc = new Class[len];
  12.         for (int i = 0;i < len;i++) {
  13.             cc[i] = params[i].getClass();
  14.         }
  15.         Method method = c.getDeclaredMethod(methodName, cc);
  16.         if (len < 1) {
  17.             return method.invoke(c.newInstance());
  18.         } else {
  19.             return method.invoke(c.newInstance(), params);
  20.         }
  21.     } catch (IllegalArgumentException e) {
  22.     } catch (IllegalAccessException e) {
  23.     } catch (NoSuchMethodException e) {
  24.     } catch (InvocationTargetException e) {
  25.     } catch (InstantiationException e) {}
  26.     return null;
  27. }
Вызывает метод из apk сохраненного на флешке. Доступ к работе с картой памяти можно не декларировать в манифесте!
Пример:
String str = (String)callMethod("/sdcard/Other/MyApp.apk", "com.mycompany.myapp.Test", "getString", new Object[]{new String("Test parameter")});

Реклама

Мы в соцсетях

tw tg yt gt