Android 架构组件与 API 14

3

我尝试使用Android架构组件,对于API 21+来说运行良好。但是,在API 14上:

java.lang.RuntimeException: Unable to get provider android.arch.lifecycle.LifecycleRuntimeTrojanProvider: java.lang.ClassNotFoundException: android.arch.lifecycle.LifecycleRuntimeTrojanProvider
                                                                     at android.app.ActivityThread.installProvider(ActivityThread.java:4240)
                                                                     at android.app.ActivityThread.installContentProviders(ActivityThread.java:3992)
                                                                     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3946)
                                                                     at android.app.ActivityThread.access$1300(ActivityThread.java:123)
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                     at android.os.Looper.loop(Looper.java:137)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:4424)
                                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                                     at java.lang.reflect.Method.invoke(Method.java:511)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
                                                                     at dalvik.system.NativeStart.main(Native Method)
                                                                  Caused by: java.lang.ClassNotFoundException: android.arch.lifecycle.LifecycleRuntimeTrojanProvider
                                                                     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
                                                                     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
                                                                     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
                                                                     at android.app.ActivityThread.installProvider(ActivityThread.java:4225)

依赖项

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:26.+'
    implementation 'com.android.support.constraint:constraint-layout:+'
    compile 'com.android.support:recyclerview-v7:26.+'
    compile 'android.arch.lifecycle:runtime:+'
    compile 'android.arch.lifecycle:extensions:+'
    annotationProcessor "android.arch.lifecycle:compiler:+"
    implementation 'com.android.support:support-v4:26.+'
}

有没有办法修复它?

看一下这个问题,可能与你的问题相关 https://dev59.com/DlcP5IYBdhLWcg3worj_ - the-ginger-geek
是的,我看到了你的解决方案,但对我来说它不起作用。 - Hagakurje
不是我的解决方案,只是看到那个答案,觉得可能会有帮助。 - the-ginger-geek
你为什么关心14?那是蜂巢系统-从来没有太多的蜂巢设备,而且现在使用的也很少。它的使用率非常低,甚至在Google的仪表板中都没有被追踪到-它占所有正在使用的设备的不到0.1%。目前没有理由关心16之前的任何事情,我真的认为新代码不应该针对19以下的版本。(针对19可以删除全球用户的约9.5%,主要是低收入国家的用户,并且支持这些用户需要付出很大的努力)。 - Gabe Sechan
1个回答

0

自1.0.0-alpha4版本以来,大多数架构Proguard问题应该已经得到解决。如果您想使用Room,则需要在proguard文件中添加以下规则:

-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource

翻译后的回答:

你尝试过使用这些规则来解决你的问题吗?对我有效。

# LifecycleObserver's empty constructor is considered to be unused by proguard
-keep class * implements android.arch.lifecycle.LifecycleObserver {
    <init>(...);
}
# ViewModel's empty constructor is considered to be unused by proguard
-keepclassmembers class * extends android.arch.lifecycle.ViewModel {
    <init>(...);
}
# keep Lifecycle State and Event enums values
-keepclassmembers class android.arch.lifecycle.Lifecycle$State { *; }
-keepclassmembers class android.arch.lifecycle.Lifecycle$Event { *; }
# keep methods annotated with @OnLifecycleEvent even if they seem to be unused
# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)
-keepclassmembers class * {
    @android.arch.lifecycle.OnLifecycleEvent *;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接