метод и классы доступны только для аромата - PullRequest
0 голосов
/ 13 сентября 2018

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

Я хочу вызвать метод 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 ]

0 голосов
/ 13 сентября 2018

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

0 голосов
/ 13 сентября 2018

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

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)
...