Неудачное решение: Landroidx / work / impl / utils / futures / AbstractFuture


I tried to implement the WorkManager API in one of my projects. The app compiles successfully, but when I try to execute some work using WorkManager, it throws the below runtime error:
Runtime Error
Failed resolution of: Landroidx/work/impl/utils/futures/AbstractFuture;

Что я знаю об этой ошибке, так это то, что она возникает, когда какой-то класс, который был доступен во время компиляции, недоступен во время выполнения. Но со мной это не похоже, потому что, когда я декомпилировал свой APK, там были все необходимые классы (включая androidx.work.impl.utils.futures.AbstractFuture)! Я пробовал версии 2.3.4, 2.4.0 и 2.5.0_Alpha01 библиотеки рабочего времени, но ни одна из них, похоже, не работала. Было бы очень полезно, если бы кто-нибудь помог мне решить эту проблему. знак равно


Примечание. К вашему сведению, проект, над которым я работаю, очень старый и, к сожалению, он все еще использует Apache Ant. Кроме того, нам будет непросто перейти на Gradle в ближайшее время, поскольку это повлияет на всю архитектуру и займет огромное количество времени. Таким образом, любое решение, предлагающее изменения в build.gradle, не принесет никакой пользы. :)


РЕДАКТИРОВАТЬ: если кому-то нужно просмотреть журнал ADB:

...
09-05 20:47:01.536 25688 25688 W System.err: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/work/impl/utils/futures/AbstractFuture;
09-05 20:47:01.536 25688 25688 W System.err:    at androidx.work.WorkManager.initialize(WorkManager.java:210)
09-05 20:47:01.536 25688 25688 W System.err:    at androidx.work.impl.WorkManagerInitializer.onCreate(WorkManagerInitializer.java:40)
09-05 20:47:01.537 25688 25688 W System.err:    at android.content.ContentProvider.attachInfo(ContentProvider.java:2102)
09-05 20:47:01.537 25688 25688 W System.err:    at android.content.ContentProvider.attachInfo(ContentProvider.java:2076)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread.installProvider(ActivityThread.java:7430)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread.installContentProviders(ActivityThread.java:6934)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6851)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread.access$1600(ActivityThread.java:242)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
09-05 20:47:01.537 25688 25688 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:107)
09-05 20:47:01.537 25688 25688 W System.err:    at android.os.Looper.loop(Looper.java:227)
09-05 20:47:01.537 25688 25688 W System.err:    at android.app.ActivityThread.main(ActivityThread.java:7822)
09-05 20:47:01.537 25688 25688 W System.err:    at java.lang.reflect.Method.invoke(Native Method)
09-05 20:47:01.537 25688 25688 W System.err:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
09-05 20:47:01.537 25688 25688 W System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1026)
09-05 20:47:01.537 25688 25688 W System.err: Caused by: java.lang.ClassNotFoundException: androidx.work.impl.utils.futures.AbstractFuture
09-05 20:47:01.537 25688 25688 W System.err:    ... 15 more
...

person Shreyash Saitwal    schedule 05.09.2020    source источник


Ответы (1)


Сегодня я исправил аналогичную проблему, когда на самом деле проблема заключалась в отсутствии ListenableFuture, хотя заголовок исключения выглядел так же, как и ваш.

Я уже добавил это в свой файл сборки ранее:

implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

Я сделал это, чтобы избежать ошибки дублирования классов, поскольку Guava был импортирован из другого места (также см. этот вопрос). После того, как эта зависимость перестала зависеть от Guava, импорт, который ранее устранял проблему, теперь сам вызывал проблему. Его повторное удаление устранило проблему.

person Namnodorel    schedule 01.11.2020
comment
Спасибо за Ваш ответ. Хотя у меня это не сработало. Теперь я получаю такую ​​ошибку: java.lang.NoClassDefFoundError: androidx.work.impl.utils.futures.SettableFuture. - person Shreyash Saitwal; 03.11.2020
comment
У меня нет большого опыта использования системы сборки, отличной от Gradle, для Android, но я думаю, что в любом случае было бы полезно, если бы вы могли поделиться более подробной информацией о том, что и как импортируется. - person Namnodorel; 04.11.2020
comment
Извините, я не совсем понял ваш вопрос. Что именно вы имеете в виду под тем, что импортируется и как? Если вы имеете в виду, какие библиотеки я использую, это все, от чего androidx.work-runtime зависит, плюс множество других внешних зависимостей, необходимых для проекта. Вместо этого этот проект не является приложением для Android, это платформа разработки приложений без кода с открытым исходным кодом, поддерживаемая MIT. Вот ссылка на репозиторий GitHub: github.com/mit-cml/appinventor-sources - person Shreyash Saitwal; 04.11.2020