Хорошо, поэтому у меня есть приложение для Android, и я начал создавать аддонную систему для приложения, чтобы разработчики могли кодировать контент-провайдеров, которые приложение может использовать для создания другого контента, я не буду проходить всю процедуру, но все работает отлично, как так:
1)
Я создал библиотеку под названием com.myaddonlib
, которую я импортировал в своем проекте в этой библиотеке, есть интерфейс и разные объекты.
2)
Теперь разработчик может создать простой проект Java на своем конце, импортировать библиотеку com.myaddonlib
и реализовать интерфейс в своем основном классе, который имеет методы, которые возвращают разные объекты из библиотеки.
3) Вернемся к андроидному приложению, я могу загрузить файл .jar, созданный разработчиком (после добавления в файл jar файла classes.dex) и с помощью android DexClassLoader я могу загрузить реализованный интерфейс так:
DexClassLoader classloader = new DexClassLoader(jarFilePath, tempDirectory, null, context.getClass().getClassLoader());
Class classToLoad = classloader.loadClass("com.apackage.Addon");
где Addon
- класс, созданный разработчиком аддона, который реализует интерфейс из библиотеки, находящейся в пакете с именем com.apackage
.
Затем я могу передать интерфейс из библиотеки com.myaddonlib
в новый экземпляр classToLoad
и вызвать функции, которые реализовал разработчик аддона.
Теперь вот проблема: я решил обновить библиотеку аддонов и удалить одну из переменных из класса, а это значит, что класс аддона теперь отличается от класса обновленной библиотеки (используется в приложении). Даже когда измененная переменная не используется, приложение вызывает сбой без каких-либо ошибок. Просто тот факт, что оба класса различны (даже когда единственная разница - просто недостающая переменная) приводит к некорректной работе. Теперь это непростая процедура для объяснения, поэтому я бы понял, что, учитывая мой плохой английский, некоторые из них не могут следовать. Моя проблема в том, что мне нужно знать, как избежать этого сбоя из-за изменения библиотеки на одном из двух концов. А также, как java обрабатывает изменения объекта в такой ситуации