Ошибка преобразования AndroidX для библиотеки после обновления Android Studio до 3.3.1, это ошибка Jetifier?
Я использую библиотеку Чака https://github.com/jgilfelt/chuck
Я не совсем уверен, когда, но я недавно сделал обновление Android Studio, и я думаю, что это, вероятно, основная причина, так как это, кажется, связано с преобразованием androidx с помощью jetifier, в настоящее время я нахожусь на Android Studio 3.3.1
Я работал правильно до того, как Чак работал до обновления, и я довольно долго работал на AndroidX. Или это ожидается, и пришло время раскошелиться на двухлетний проект и преобразовать его для совместимости с AndroidX? Эта библиотека - настоящее благо, и я действительно не хочу ее терять.
Когда я смотрю на источник Chuck, BaseChuckActivity расширяет AppCompatActivity, которая уже должна расширять класс LifecycleOwner, поэтому я пришел к выводу, что это ошибка Jetifier.
Я получаю аварию
java.lang.IncompatibleClassChangeError: Class 'com.readystatesoftware.chuck.internal.ui.TransactionActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/com.burstoralcare-k6cLY7GKXKIODVqHmJokmw==/split_lib_dependencies_apk.apk)
at androidx.lifecycle.LiveData.observe(LiveData.java:172)
at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
at com.readystatesoftware.chuck.internal.ui.TransactionActivity.onCreate(TransactionActivity.java:91)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
1 ответ
Таким образом, поскольку в моем вопросе не было никакой активности по моему вопросу, я приложил дополнительные усилия, чтобы выяснить это, я разложил проект Чака над обновлением всего до Androidx и обновил целевой и скомпилировал SDK до 28, а ТАДА ПРОИЗОШЛО С ПРОШЛОМ (казалось, что произойдет при использовании Loaders?), так что, даже несмотря на то, что сбой выглядел как ошибка подшивки, очевидно, что это не ошибка подзарядки, потому что теперь новый Chuck aar полностью базировался на AndroidX (позже я пошел дальше и даже обновился) язык, используемый библиотекой от Java до Kotlin), поэтому я предположил, что виновником были библиотеки androidx, я посмотрел на мой appcompat libray, потому что сбой говорил о том, что действие Chuck не реализовывало LifeCycleOwner, что было неверно, потому что AppCompatActivity был LifeCycleOwner, поэтому Я был на версии "androidx.appcompat:appcompat:1.0.2" и изменил его на "androidx.appcompat:appcompat:1.1.0-alpha02" и больше не вылетает!! (Даже в оригинальной библиотеке, которая должна быть очищена)
Так что же случилось? Я думаю, что некоторая зависимость, которую я мог бы включить, должна была использовать вариант 1.1.0.variant или что-то еще с ошибочной реализацией, и более новая библиотека должна была иметь приоритет над моей 1.0.2, поэтому другое решение должно форсировать использование 1.0.2 для androidx.appcompat что-то вроде
configurations.all {
resolutionStrategy {
force 'androidx.appcompat:appcompat:1.0.2'
}
}
Я не проверял вышеизложенное, но теоретически это должно работать, если вы хотите придерживаться стабильной версии, в противном случае вы можете просто перейти на альфа-вариант, который я упомянул выше, и он обязательно должен работать.