2015-04-16 2 views
2

Я хочу добавить .jar динамически. Поэтому я делаю демоверсию. Но я не знаю, как новый DexClassLoader. Я не знаю, как добавить первые параметры.Как использовать DexClassLoader?

final File optimizedDexOutputPath = new File("" + File.pathSeparator + "test.jar"); 
//PackageManager pm = getPackageManager(); 
String dexOutputDir = getApplicationInfo().dataDir; 

DexClassLoader dexClassLoader = new DexClassLoader("", dexOutputDir, null, getClassLoader()); 

Я сделал динамическую .jar как test.jar (стать декс), а также новую папку «текст» в проектах и ​​поставить text.jar в нем.

Можете ли вы помочь мне увидеть, что я сделал неправильно?

+0

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html – fadden

ответ

0

Код для динамической загрузки баночки должна выглядеть примерно так:

//get the path to your .jar as a String 
String jarPath = this.getApplicationContext().getFilesDir().getAbsolutePath(); 
jarPath += File.pathSeparator + "test" + File.pathSeparator + "test.jar"; 

//get a path to the directory you want to store odexs in as a String 
String optimizedDir = this.getApplicationContext().getDir("odex", MODE_PRIVATE).getAbsolutePath(); 

//finally, call DexClassLoader 
DexClassLoader dcl = new DexClassLoader(jarPath, optimizedDir, null, getClassLoader()); 

выше предполагается, что вы создали каталог с именем «тест» в приватной зоне файлов вашего приложения и помещены test.jar в том, что каталог. Вы можете создать этот каталог и, возможно, скопировать test.jar из области активов вашего приложения в этот каталог, когда ваше приложение начнет работу.

+0

Второй "File.PathSeparator" является ? @ awm129 – CoolEgos

+0

'optimizedDir = this.getApplicationContext(). getDir (« odex », MODE_PRIVATE) .getAbsolutePath();' получает такие вещи, как '/data/data/com.egos.example/app_odex', он не может работать .and Я не могу создать 'test' – CoolEgos

+0

Как я уже упоминал, вам нужно будет создать этот «тестовый» каталог и скопировать свой .jar в него ранее в коде. Вы можете использовать один и тот же метод Context.getDir() для создания "test" dir, который я использовал здесь для создания каталога odex. – awm129

0

Попробуйте этот код:

// dexPath is the absolute path of your **DEX** file 
ClassLoader loader = context.getClassLoader();  
dexLoader = new dalvik.system.DexClassLoader(**dexPath**, dexOutputDir, null, loader);