如何使用DexClassLoader?

时间:2015-04-16 11:16:36

标签: java android dexclassloader

我想动态添加.jar。所以我做了一个演示。但我不知道如何新建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(成为dex)以及新文件夹' text'在项目中并将text.jar放入其中。

你能帮我看看我做错了吗?

2 个答案:

答案 0 :(得分:0)

动态加载jar的代码应如下所示:

//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"的目录。在您应用的私人文件区域内,并将test.jar放在该目录中。您可以创建此目录,并可能在您的应用首次启动时将test.jar从您应用的资源区域复制到此目录中。

答案 1 :(得分:0)

试试这段代码:

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