У меня есть библиотека android, которая использует Work manager
для обработки расписаний задач. Для обратной совместимости я создал библиотеку с помощью библиотеки поддержки.
, поскольку setInitialDelay
перемещается в родительский класс в WorkManager v2.1.0, если библиотека использует это (при использовании WorkManager v1 и поддержка библиотеки), Jetifier
сделает WorkManger v1 таким же, как WorkManager v2.0.1, а не v2.0.2. Таким образом, это приведет к ошибке:
Caused by: java.lang.NoSuchMethodError:
No virtual method setInitialDelay(JLjava/util/concurrent/TimeUnit;)Landroidx/work/OneTimeWorkRequest$Builder;
in class Landroidx/work/OneTimeWorkRequest$Builder;
Старый код workManager (2.0.1) выглядит так:
abstract class WorkRequest {
abstract static class Builder<B extends Builder, W extends WorkRequest> {
}
}
class OneTimeWorkRequest extends WorkRequest {
static class Builder extends WorkRequest.Builder<Builder, OneTimeWorkRequest> {
public @NonNull Builder setInitialDelay(long duration, @NonNull TimeUnit timeUnit) {
....
}
}
}
А новый (^ 2.1.0):
abstract class WorkRequest {
abstract static class Builder<B extends Builder, W extends WorkRequest> {
public @NonNull B setInitialDelay(long duration, @NonNull TimeUnit timeUnit) {
...
}
}
}
class OneTimeWorkRequest extends WorkRequest {
static class Builder extends WorkRequest.Builder<Builder, OneTimeWorkRequest> {
}
}
TL; DR
Если разработчик использует workManager v2.1.0
, что произойдет с библиотеками, которые имеют WorkManager v1 и использовать Jetifer для преобразования в v2?