Chen Kinnrot
Chen Kinnrot

Reputation: 21015

Loading classes from jar on android

I tried really hard, but always get a Class Not Found exception, from reading this answer https://stackoverflow.com/a/3024261

I took my jar run the

dx --dex --output=C:\classes.dex C:\MyAndroidLib.jar

and got a dex file

then I run the

apt add C:\MyLib.jar C:\classes.dex

to create a jar with the dex file.

then I wrote the following code.

DexClassLoader classLoader = new DexClassLoader(
            destPath, dirPath +"/" , null, getClass().getClassLoader());
    Class<?> classToLoad = classLoader.loadClass("ClassImpl");

on debug I can see that the dex is inside the classLoader(under the mDexs member) and the ClassImpl is the only class I got inside.

but I keep getting the class not found exception.

Anyone got a working sample of dynamic class loading from external jar ? Someone knows whats my problem?

Upvotes: 0

Views: 1595

Answers (1)

Emilio Aguilar
Emilio Aguilar

Reputation: 11

I did not use aapt... Only dex. And I got my class loaded, and my methods called.

Use this code for see inside the dex file:

DexFile dexfile = DexFile.loadDex(url_jar_path, 
        File.createTempFile("opt", "dex", context.getCacheDir()).getPath(), 0);

// Print all classes in the DexFile

Enumeration<String> classNames = dexfile.entries();

String classname = "";

while (true) {
    if (! classNames.hasMoreElements()) {
        break;
    }
    classname = classNames.nextElement();
}

Use this code for see inside the class:

Class class = dexclassloader.loadClass(ruta_clase_en_jar);

String name;

Method[] method_array = clase.getMethods();

for (Method i: method_array) {
    name = i.getName ();
}

Upvotes: 1

Related Questions