Всем привет!
Пытаюсь научиться исполнять загруженные jar и apk файлы с помощью DexClassLoader. Вот нашел в Сети код:
String defaultLibPath = mActivity.getAssets() + "/Plugins/HelloWorld.jar";
File dexOutputDir = mActivity.getDir("dex", Context.MODE_PRIVATE);
DexClassLoader dcl = new DexClassLoader(defaultLibPath,
dexOutputDir.getAbsolutePath(),
null,
ClassLoader.getSystemClassLoader());
try{
Class<?> clazz = dcl.loadClass("HelloWorld");
} catch (ClassNotFoundException e) { e.printStackTrace(); }
Залил в эмулятор Genymotion свой jar-файл: HelloWorld.jar. Вот его исходник:
package pack;
public class HelloWorld {
static int summer(int a, int b){
int c = a+b;
System.out.print( "Summ is \n" + c );
return c;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int c = summer(5, 6);
}
}
По коду из Сети:
Пусть путь к исполняемому файлу хранится здесь: String defaultLibPath
. Нечто, что будет исполняться, будет находиться здесь: dexOutputDir
. Доступ к исполняемому файлу получу через dcl. А вот тут непосредственно имеем класс, который загрузили: Class<?> clazz = dcl.loadClass("HelloWorld");
. Это тот самый класс, который пришел по сети и будет исполняться. Вышеприведенные рассуждения верны?
Вот проблема: AndroidStudio в режиме отладки выдает:
dcl = "dalvik.system.DexClassLoader[/mnt/sdcard/MyFiles/HelloWorld.jar]"
Exception:
e = "java.lang.ClassNotFoundException: HelloWorld"
Что не так? Говорит, на сколько я понимаю, что не нашел класс HelloWorld. В чем может быть причина? В сети по этой теме куча всего навалено, но мне особо это не помогло. Заранее благодарен за ответы. )
Обновление
Выяснил, что чтобы запустить Jar на андроиде, его нужно конвертировать в "dalvik".
Тут полезные статьи по теме конвертации:
- http://normandocarvalho.com/2013/08/17/how-to-convert-external-jar-that-contains-java-bytecode-to-dalvik-bytecode/
- http://davanum.wordpress.com/2007/12/04/command-line-java-on-dalvikvm/
- http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html
Т.к. я не спец по андроиду, по этому никак не могу понять, как преобразовать Jar в dex.
В эклипсе создаю проект Helloworld->Export->Runnable Jar
. Затем не знаю, как быть дальше. Пытался прописать:
"K:\Program Files\Android\android-studio\sdk\build-tools\android-4.4W\"dx --dex --output=classes.dex HelloWorld2.jar
Выкидывает ошибки.
Свежие комментарии