WorkManager 2.0.1 - 2.1.0 API-интерфейс изменить "setInitialDelay" при миграции с V1 - PullRequest
1 голос
/ 18 января 2020

У меня есть библиотека 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?

...