2016-05-18 1 views
2

Je mets un fichier .jar contenant le fichier .dex dans le répertoire "/ sdcard", puis j'essaye de charger la classe dans le fichier .jar en utilisant respectivement DexClassLoader et PathClassLoader. Les deux peuvent charger la classe avec succès. Quelles sont les différences entre eux? Voici mon code:Quelles sont les différences entre DexClassLoader et PathClassLoader?

String dexPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.jar"; 
PathClassLoader classLoader1 = new PathClassLoader(dexPath, getClassLoader()); 
DexClassLoader classLoader2 = new DexClassLoader(dexPath, getDir("dex", 0).getAbsolutePath(), null, getClassLoader()); 
try { 
    Class clazz1 = classLoader1.loadClass("com.focans.loader.Peter"); 
    Class clazz2 = classLoader2.loadClass("com.focans.loader.Peter"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Répondre

2

Vous devriez lire officielle Directive sur les

DexClassLoader

Un chargeur de classe qui charge les classes de fichiers .jar et .apk contenant un entrée classes.dex. Cela peut être utilisé pour exécuter du code non installé comme partie d'une application.

PathClassLoader

Fournit une implémentation simple de ClassLoader qui fonctionne sur une liste des fichiers et répertoires dans le système de fichiers local, mais ne tentative de charger les classes du réseau. Android utilise cette classe pour son chargeur de classe système et pour son ou ses chargeurs de classe d'application.

DexClassLoader est instancié pour charger la bibliothèque à partir du fichier dex secondaire extraite.

PathClassLoader Utilisé pour charger des classes dans ant avec un chemin de classe différent de celui utilisé pour démarrer ant. Notez qu'il est possible de forcer une classe dans ce chargeur même lorsque cette classe est sur le chemin de classe système en utilisant la méthode forceLoadClass. Toute classe ultérieure chargée par cette classe utilisera alors ce chargeur plutôt que le chargeur de classe système.

+0

Qu'entendez-vous par 'ant'? De plus, il ne semble pas y avoir de méthode 'forceLoadClass' dans PathClassLoader. – Codebender