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;
} |
Partager