Ошибка преобразования AndroidX для библиотеки после обновления Android Studio до 3.3.1, это ошибка Jetifier? - PullRequest
0 голосов
/ 27 февраля 2019

Я использую библиотеку Chuck https://github.com/jgilfelt/chuck

Я не совсем уверен, когда, но я недавно сделал обновление Android Studio, и я думаю, что это, вероятно, основная причина, так как она, похоже, связана с androidxЯ использую Android Studio 3.3.1

. Чак работал до тех пор, пока не началось обновление, и я довольно долго работал на AndroidX, так что же, это ошибка Jetifier?Или это ожидается, и пришло время раскошелиться на двухлетний проект и преобразовать его для совместимости с AndroidX?Эта библиотека весьма полезна, и я действительно не хочу ее терять.

Когда я смотрю на исходный код Чака, 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 Ответ

0 голосов
/ 02 марта 2019

Таким образом, поскольку в моем вопросе не было активности для моего вопроса, я приложил дополнительные усилия, чтобы выяснить это, я разложил проект Чака над обновлением всего до Androidx и обновил целевой и скомпилировал SDK до 28, а ТАДА ПОСЛЕДНЕЕ ПРОИЗОШЛО.(казалось, что это происходит при использовании Loaders?), поэтому, даже несмотря на то, что в результате аварии это выглядело как ошибка в jtifier, вполне очевидно, что это не ошибка в jtifier, потому что теперь новый 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'
    }
}

Я не проверял выше, но теоретически это должно работать, если вы хотите придерживаться стабильной версии, в противном случае вы можете просто перейти на альфавариант, который я упомянул выше, и он обязательно должен работать.

...