Метод и классы доступны только для аромата
Скажем, у меня есть вкус бесплатно / платно.
Я хочу вызвать метод 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)