Метод и классы доступны только для аромата

Скажем, у меня есть вкус бесплатно / платно.

Я хочу вызвать метод checkSubscription() за платную функцию. Классы, указанные внутри этого метода, будут доступны только для платной версии, потому что я поместил их в другой модуль, который компилируется только для платной версии.

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

редактировать

Да, я знаю, что я могу проверить свой вкус программно на Java, как

if (BuildConfig.BUILD_VARIANT.equals("Your flavor name")){
   //do something
}

или путем определения buildConfigField,

Я объясняю лучше

  • Мои занятия Example.java находится в модуле PaidLibrary, а PaidLibrary скомпилирован только для платного варианта.
  • Теперь у меня есть класс ActivityExample.java в котором я импортировал Example.class,
  • Я проверяю текущий вкус перед использованием этого Example.java, но это создаст classNotFoundException так как ActivityExample.java содержит импорт и использование Example.java,
  • Так что это мой вопрос, как кодировать классы, которые доступны для платного вкуса?

2 ответа

Нет, это невозможно, вы должны предоставить Example.java или деятельность, которая использует Example.java для платных и бесплатных версий вашего приложения. Когда вы создаете сборку со свободным вкусом, она не сможет решить Example.java, что приводит к ошибке времени компиляции. Вы можете просто добавить макет / манекен / заполнитель Example.java для вашего свободного вкуса, чтобы разрешить конфликты сборки.

Попробуйте использовать отражение:

ClassLoader classLoader = YOUR_CLASS.class.getClassLoader();
Class specificClass = classLoader.loadClass("YOUR_CLASS_RELATIVE_PATH");
Object result;  //This is object as your method can return any datatype

Method method = specificClass.getMethod(methodName, ARGS_TO_YOUR_METHOD_IF_ANY.class); // if your arg is a custom class 
result = method.invoke(specificClass.newInstance(), ARGS_TO_YOUR_METHOD_IF_ANY)
Другие вопросы по тегам