Вызов метода из стороннего *.apk файла
- public Object callMethod(String pathToApk, String absClassName, String methodName, Object[] params) {
- DexClassLoader dLoader = new DexClassLoader(pathToApk, getApplicationContext().getApplicationInfo().dataDir, null, ClassLoader.getSystemClassLoader().getParent());
- Class c = null;
- try {
- c = dLoader.loadClass(absClassName);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try {
- int len = params.length;
- Class[] cc = new Class[len];
- for (int i = 0;i < len;i++) {
- cc[i] = params[i].getClass();
- }
- Method method = c.getDeclaredMethod(methodName, cc);
- if (len < 1) {
- return method.invoke(c.newInstance());
- } else {
- return method.invoke(c.newInstance(), params);
- }
- } catch (IllegalArgumentException e) {
- } catch (IllegalAccessException e) {
- } catch (NoSuchMethodException e) {
- } catch (InvocationTargetException e) {
- } catch (InstantiationException e) {}
- return null;
- }
Вызывает метод из apk сохраненного на флешке. Доступ к работе с картой памяти можно не декларировать в манифесте!
Пример:
String str = (String)callMethod("/sdcard/Other/MyApp.apk", "com.mycompany.myapp.Test", "getString", new Object[]{new String("Test parameter")});
Пример:
String str = (String)callMethod("/sdcard/Other/MyApp.apk", "com.mycompany.myapp.Test", "getString", new Object[]{new String("Test parameter")});