1

我正在使用库 Chuck https://github.com/jgilfelt/chuck

我不确定什么时候,但我最近更新了 Android Studio,我认为这可能是根本原因,因为它似乎与 jetifier 的 androidx 转换有关,目前我使用的是 Android Studio 3.3.1

在更新之前,我让 Chuck 正常工作,而且我在 AndroidX 上已经有一段时间了,所以这是一个 jetifier 错误吗?或者这是预期的,是我分叉这个 2 年的项目并将其转换为 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)
4

1 回答 1

1

并将其更改为“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'
    }
}

我还没有测试过上面的内容,但理论上如果你想坚持使用稳定版本,它应该可以工作,否则你可以更改为我上面提到的 alpha 变体,它肯定可以工作。

于 2019-03-02T08:42:35.507 回答