Bonjour,

J'ai actuellement une application où il est possible de faire défiler des Fragments dans une vue. Et cette partie fonctionne très bien :)

La prochaine étape est de charger ces fragments dans des librairies (.jar) situées sur l'appareil. Pour cela mon workspace est composé de 3 projets :

  • L'application principal
  • Une librairie qui dispose d'une classe abstraite qui hérite de Fragment et représentant mon modèle de fragment
  • Une librarie avec une classe qui hérite de celle abstraite et qui représente mon fragment à ajouter


Le point où je bloque se situe au moment où je charge mon fragment dans l'application principal.

Mon code est ci-dessous. J'ai une exception qui est soulevé à la ligne 12 (ClassNotFoundException).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
	public List<Class<? extends DynamicFragment>> getDynamicFragments(Context context) {
		List<Class<? extends DynamicFragment /* Mon modele de fragment */ >> dynamicFragments = new ArrayList<Class<? extends DynamicFragment>>();
		List<String> jarFileList = getJarFileList();
 
		if(jarFileList != null && !jarFileList.isEmpty()) {
			String jarPath = mfolderPath.getAbsolutePath() + "/" + jarFileList.get(0); //Chemin vers la première librairie
			String fullClassName = getFullClassName(jarPath);
			try {
				URLClassLoader classLoader = new URLClassLoader(new URL[]{new File(jarPath).toURI().toURL()}, this.getClass().getClassLoader());
 				// DexClassLoader classLoader = new DexClassLoader(jarPath, "/data/data/" + context.getPackageName() + "/", null, getClass().getClassLoader());
 
				Class<?> classToLoad = classLoader.loadClass(fullClassName); //Exception : ClassNotFoundException
				dynamicFragments.add(fragmClass);
			} catch(Exception e) {
				e.printStackTrace();
			}
		}
 
		return dynamicFragments;
	}
 
	private String getFullClassName(String jarPath) {
		try {
			JarFile jarFile = new JarFile(jarPath);
			Enumeration allEntries = jarFile.entries();
			while (allEntries.hasMoreElements()) {
				JarEntry entry = (JarEntry) allEntries.nextElement();
				String name = entry.getName();
				if(name.contains("SampleFragm")  /* Mon Fragment a ajouter */) {
					name = name.replaceAll(".class", "").replaceAll("/", ".");
					return name;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
 
		return null;
	}
Si quelqu'un a une idée je suis preneur :)