Динамически загружать классы из других APK - PullRequest
2 голосов
/ 13 октября 2011

Я создаю структуру, которая будет использоваться многими отделами в моей рабочей среде. Мне нужен способ динамически загружать классы в фреймворк из отдельных apk отделов. Например, способ динамической загрузки класса провайдера контента отдела А. в платформу.

Мне не повезло, когда я пытался это выяснить, любая помощь будет высоко ценится. Спасибо.

Ответы [ 2 ]

8 голосов
/ 27 марта 2014

Если вы хотите загрузить уже известный класс из другого .apk, установленного в настоящее время на вашем устройстве, вы можете воспользоваться следующим подходом (при условии, что у вашего класса есть конструктор по умолчанию).Также помните, что вы должны знать имя пакета другого файла .apk, а имя пакета другого файла .apk должно отличаться от имени пакета вашего приложения.

private Object loadClass(String packageName, String className){
    Object plugin = null;
    try {
        PackageManager packageManager = getPackageManager();
        ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, 0);
        DexFile df = new DexFile(appInfo.sourceDir);
        ClassLoader cl = getClassLoader();
        Class classToInvestigate = df.loadClass(className, cl);
        plugin = classToInvestigate.newInstance();


    } catch (Exception e) {
        System.out.println("EXCEPTION");
    }
    finally{
        return plugin;
    }
}
2 голосов
/ 13 октября 2011

Я ожидаю, что это будет дыра в безопасности, если это будет разрешено, и ваш дизайн рискован, поскольку вы тесно связываете свою программу с чьей-либо другой.

Лучшее решение - просто использовать поставщика контента из своей деятельности так же, как вы можете получить доступ к контактам в Android.

...