gpt4 book ai didi

Android Studio 更新到 3.3.1 后,库的 AndroidX 转换失败,这是 Jetifier 的错误吗?

转载 作者:行者123 更新时间:2023-11-29 23:18:15 29 4
gpt4 key购买 nike

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

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

在更新之前,我一直让 Chuck 正常工作,而且我已经在 AndroidX 上使用了很长一段时间,所以这是一个 jetifier 错误吗?或者这是预期的,现在是我 fork 这个 2 岁的项目并将其转换为 AndroidX 兼容性的时候了?这个库非常有用,我真的不想失去它。

当我查看 Chuck 源代码时,BaseChuckActivity 正在扩展 AppCompatActivity,而 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)

最佳答案

因此,由于我的问题在 SO 中没有任何 Activity ,我付出了额外的努力来弄清楚,我将 Chuck 项目 fork ,将所有内容更新为 Androidx 并将目标和编译 SDK 更新为 28 和 tada 崩溃仍然发生(这似乎是在使用 Loaders 时发生的?),所以即使崩溃使它看起来像一个 jetifier 错误,但它很明显不是一个 jetifier 错误,因为现在新的 Chuck aar 完全基于 AndroidX(我稍后更进一步甚至将库使用的语言从 Java 更新为 Kotlin)所以我认为罪魁祸首是 androidx 库,我查看了我的 appcompat 库,因为崩溃是说 Chuck Activity 没有实现 LifeCycleOwner,这是错误的,因为 AppCompatActivity 是一个LifeCycleOwner,所以我的版本是“androidx.appcompat:appcompat:1.0.2”,并将其更改为“androidx.appcompat:appcompat:1.1.0-alpha02”,不再崩溃!! (即使在必须被jetified的原始库上)

那到底发生了什么?我认为我可能包含的某些依赖项一定是在使用 1.1.0.variant 或其他具有错误实现的东西,而较新的库必须优先于我的 1.0.2,因此其他解决方案应该强制将 1.0.2 用于 androidx.appcompat 类似

configurations.all {
resolutionStrategy {
force 'androidx.appcompat:appcompat:1.0.2'
}
}

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

关于Android Studio 更新到 3.3.1 后,库的 AndroidX 转换失败,这是 Jetifier 的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901722/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com