У меня есть файл .jar на sdCard (я использовал инструмент dx для компиляции обычного .jar для dex.. в противном случае андроид будет жаловаться во время выполнения)
Класс, который я хочу использовать, на самом деле представляет собой Activity и "use", я имею в виду Inflate!
A) Я заметил, что если я загружаю класс таким образом, загруженный класс будет иметь пакетный пакет пакета parrent-класса (тот, в котором я запускаю код: example: real-package of class в библиотеке jar: "com.something" и my-app-package: "com.wonderfull" → загруженный класс находится в "com.wonderfull.com.something":)) → проверено: он сохраняет оригинальный пакет, так же, как в библиотеке
B) В случае "наилучшего" сценария я получаю эту ошибку:
Невозможно создать экземпляр активности ComponentInfo {com.appno2/com.appno1.futureLib.LibActivity}: java.lang.ClassNotFoundException: com.appno1.futureLib.LibActivity в loader dalvik.system.PathClassLoader [/data/app/com.appno2-1.apk]
C) В манифесте я разместил Activity (тот, который будет загружен динамически) следующим образом:
активность Android: name= "com.appno1.futureLib.LibActivity" android: label = "@string/app_name" > /Деятельность >
Итак, я повторяю вопрос из заголовка: возможно ли динамически загружать класс Activity из библиотеки jar на sdCard и фактически использовать его?
В случае "Зачем вам это нужно?" - просто любопытные! + как концепция: возможность загрузить фактический код приложения (в форме банки чего-то) сразу после того, как пользователь ввел действительную лицензию
Обновление: - этот идеал работает с фрагментами (значит, класс, который должен быть импортирован, является фрагментом)
Текущее заключение: - возможно, существуют классы lame java или даже классы, связанные с интерфейсом Android в внешнем .jar(например, на SDCard или для загрузки из интернета и т.д.) и загружать их динамически при необходимости. О да: вы не можете работать так, как это делают:(.. возможно даже не службы..
Дополнительная информация # 1: Возможно ли динамически загружать библиотеку во время выполнения из приложения Android?
Дополнительная информация # 2: http://android-developers.blogspot.ro/2011/07/custom-class-loading-in-dalvik.html
Regardin URLClassLoader: это работает (без привлечения DalvikClassLoader - ClassNotFoundException & & obviosly: по-прежнему не может надуть активность, загруженную таким образом)
File file = new File("/sdcard/myLib.jar");
File tmpDir = getDir("dex", 0);
ClassLoader loader = new URLClassLoader(new URL[]{file.toURI().toURL()}, this.getClass().getClassLoader());
DexClassLoader classloader = new DexClassLoader(file.getAbsolutePath(), tmpDir.getAbsolutePath(), null, loader);
Class<Object> classref = (Class<Object>) classloader.loadClass("packageInLib.ClassName");
Object myInstance = classref.getConstructor().newInstance();
Or instead of "loadClass"
Class<?> classref = Class.forName("packageInLib.ClassName", true, dalvikClassLoader);