Вызов динамического кода объекта из базового модуля
Я пытаюсь реализовать динамическую функцию, где из моего базового модуля я должен вызывать некоторые методы в функции, но это только возможно вызвать базовые методы из функции, есть ли способ сделать код функции доступным из базового модуля? (я понимаю, что может случиться, если функция не установлена)
Я реализовал это, используя стандартные документы Google, поэтому у меня нет другого кода или реализации
Сегодня без динамической функции у меня есть два.apks, и я использую связь через AIDL, я пытаюсь удалить использование AIDL и использовать прямой вызов
2 ответа
Я также пробую динамические функциональные модули.
Вот мой подход:
- Держите базовый абстрактный класс в базовом приложении.
- Реализует базовый класс в динамическом объекте.
Feature feature = (Feature) Class.forName("full.class.name.FeatureImpl").newInstance();
Затем вы получили экземпляр для вызова кода функции.
Поскольку у вас не может быть зависимости от времени компиляции модуля динамических функций от модуля приложения:
- Вам необходимо сначала убедиться, что модуль установлен:
Используйте метод SplitInstallManager, getInstalledModules() и убедитесь, что он существует.
Используя отражение, создайте экземпляр класса, который вы хотите вызвать, и вызовите разные методы:
Class<?> dynamicFeatureClass = Class.forName("packagename.DFClass") Constructor<?> cons = dynamicFeatureClass.getConstructor(); Object dynamicFeatureClassInstance = cons.newInstance();
Теперь, используя отражение, вы можете вызывать разные методы.
- Было бы лучше, если бы вы определили общий интерфейс в своем базовом модуле и реализовали эти методы в своем динамическом классе пространственных объектов.
Тогда вы сможете:
FeatureContract feature = (FeatureContract) dynamicFeatureClassInstance;
// In the base module.
public interface FeatureContract
{
void performSomething();
}
// In the dynamic feature module.
DFClass implements FeatureContract
{
performSomething()
{
//code
}
//other Class methods
}
При таком подходе вам нужно будет сделать только один вызов отражения, чтобы создать экземпляр вашего класса в модуле динамических функций, и после этого вы сможете использовать преимущества времени компиляции, как если бы вы вызывали методы с помощью интерфейса.