Realm不能与SLF4J一起使用?

时间:2016-05-14 11:27:58

标签: realm

我们想在我们的应用程序中集成Realm,我们遇到了以下问题:

FATAL EXCEPTION: XService
    Process: xx.xxx.xxxx, PID: 16462
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/gradle/logging/internal/slf4j/OutputEventListenerBackedLoggerContext;
       at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:30)
       at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:27)
       at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
       at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
       at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279)
       at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
       at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265)
       at xx.xxx.xxxx.xxxxx.impl.core.StateMachine.<init>(StateMachine.java:52)
       at xx.xxx.xxxx.xxxxx.android.XService$ServiceHandler.startController(XService.java:670)
       at xx.xxx.xxxx.xxxxx.android.XService$ServiceHandler.handleMessage(XService.java:536)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.os.HandlerThread.run(HandlerThread.java:61)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "org.gradle.logging.internal.slf4j.OutputEventListenerBackedLoggerContext" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/xx.xxx.xxxx-2/base.apk"],nativeLibraryDirectories=[/data/app/xx.xxx.xxxx-2/lib/arm, /data/app/xx.xxx.xxxx-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
       at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:30) 
       at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:27) 
       at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 
       at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 
       at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279) 
       at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252) 
       at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265) 
       at xx.xxx.xxxx.xxxxx.impl.core.StateMachine.<init>(StateMachine.java:52) 
       at xx.xxx.xxxx.xxxxx.android.XService$ServiceHandler.startController(XService.java:670) 
       at xx.xxx.xxxx.xxxxx.android.XService$ServiceHandler.handleMessage(XService.java:536) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.os.HandlerThread.run(HandlerThread.java:61) 
    Suppressed: java.lang.ClassNotFoundException: org.gradle.logging.internal.slf4j.OutputEventListenerBackedLoggerContext
       at java.lang.Class.classForName(Native Method)
       at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
       at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 14 more
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

StaticLoggerBinder的样子:

public class StaticLoggerBinder implements LoggerFactoryBinder {

    private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();

    private static final String loggerFactoryClassStr = AndroidCustomLoggerFactory.class.getName();

    private final ILoggerFactory loggerFactory = new AndroidCustomLoggerFactory();

    private StaticLoggerBinder() {
    }

    public static final StaticLoggerBinder getSingleton() {
       return SINGLETON;   // line 27
    }

    public ILoggerFactory getLoggerFactory() { //line 30
       return this.loggerFactory;
    }

    public String getLoggerFactoryClassStr() {
       return loggerFactoryClassStr;
    }
}

根据我的理解,问题可能出在Realm的变换器上。它希望在我们的代码中包含一些未知的记录器。我们的应用程序的主要问题是,我们有一些第三方库,也使用SLF4J,我们无法修改它。我尝试使用0.90.1版本,而第三方库使用的SLF4J是1.6.4版本。 Dexguard是7.1.26。

另请注意,Realm适用于我的环境和具有相同依赖关系的另一个项目,但第三方库和SLF4J除外。

依赖项列表:

plugins:
apply plugin: 'com.android.library'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'dexguard'
apply plugin: 'realm-android'

dependencies:
provided 'javax.annotation:jsr250-api:1.0'
apt 'com.google.dagger:dagger-compiler:2.0.2'
compile([
        'com.google.dagger:dagger:2.0.2',
        'com.mcxiaoke.volley:library:1.0.18',
        'com.google.code.gson:gson:2.3.1',
        'io.reactivex:rxjava:1.0.11',
        'io.reactivex:rxandroid:0.24.0',
        'com.jakewharton.timber:timber:3.1.0',
        'com.squareup.okhttp:okhttp:2.6.0',
        'com.squareup.okio:okio:1.6.0',
        'com.android.support:support-v4:22.1.1'
])
compile files('libs/libconceal.jar')
compile files('libs/conceal_android.jar')
compile files('../dexguard/dexguard-runtime.jar')

compile files('libs/slf4j-api-1.6.4.jar')
compile files('libs/lib3rdparty.jar')

retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:2.3.0'

这可能吗,Realm在这里搞乱了吗?有什么办法可以阻止吗?

0 个答案:

没有答案