2017-02-23 5 views
11

हाय मैं अपने आवेदन के लिए realm डेटाबेस का उपयोग कर रहा हूं और यूनिट परीक्षण करने के लिए roboelectric इकाई परीक्षण ढांचे का उपयोग कर रहा हूं। मुझे लगता है कि realm देशी सी कोड में लिखा गया है, इसकी कार्यक्षमता के लिए librealm-jni.so फ़ाइल है।त्रुटि: java.lang.UnsatisfiedLinkError roboelectric और realm

मैं UnsatisfiedLinkError त्रुटि, पढ़ा कहीं कि robolectric देशी पुस्तकालयों का समर्थन नहीं करता हो रही है। मेरा मानना ​​है कि इसे हल करने के लिए कुछ रास्ता होना चाहिए। मैंने इस How to load .so when using Robolectric? के स्वीकार्य उत्तर की कोशिश की लेकिन कोई भाग्य नहीं।

java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\XS~1\AppData\Local\Temp\android-tmp-robolectric7796034244909642596\app_lib\realm-jni.dll.2.3.1 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) 
    at java.lang.Runtime.load0(Runtime.java:809) 
    at java.lang.System.load(System.java:1086) 
    at com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(SystemLibraryLoader.java:29) 
    at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:198) 
    at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:136) 
    at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70) 
    at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:57) 
    at io.realm.internal.RealmCore.loadLibrary(RealmCore.java:59) 
    at io.realm.Realm.init(Realm.java:187) 
    at com.xyz.helloworld.HelloWorldApplication.onCreate(HelloWorldApplication.java:17) 
    at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:147) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:329) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:259) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:41) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:199) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) 
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) 
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) 
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) 
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
    at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377) 
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

HelloWorldApplication.java

public class HelloWorldApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Realm.init(this); 

     RealmConfiguration config = new RealmConfiguration.Builder() 
       .name("book.realm") 
       .schemaVersion(1) 
       .build(); 

     Realm.setDefaultConfiguration(config); 
    } 

    protected void loadNativeLibraries() { 
     try { 
      System.loadLibrary("librealm-jni"); 
     } catch (UnsatisfiedLinkError e) { 
     } 
    } 
} 

TestHelloWorldApplication.java

public class TestHelloWorldApplication extends HelloWorldApplication { 

    @Override 
    protected void loadNativeLibraries() { 
     //do nothing 
    } 
} 
+0

मुझे लगता है कि क्योंकि क्षेत्र में ही देशी पुस्तकालयों लोड करता है यह काम नहीं करता। तो आपको रीयलएम प्रारंभिकरण को उस विधि में स्थानांतरित करने की आवश्यकता है जिसे इसे कॉल नहीं किया जाएगा या बेहतर नकल नहीं किया जाएगा। https://github.com/Glucosio/glucosio-android/blob/develop/app/src/main/java/org/glucosio/android/GlucosioApplication.java –

+0

@EugenMartynov यह मैं के रूप में काम करने के लिए नहीं जा रहा है के लिए दृष्टिकोण के लिए देखो यह तुम्हें पता है @EugenMartynov –

+2

मेरा संदेश से पहले कॉल करने के लिए अनुमति नहीं दी जाएगी में' realm' तरीकों बोल रहा हूँ आप विंडोज़ पर एक .so लोड करने में सक्षम नहीं होंगे? क्या आपके डीबी में विंडोज़। डीएल बिल्ड है? –

उत्तर

1

चेक इस out

यह एक खुला मुद्दा यह है कि क्षेत्र Robolectric (अभी तक) का समर्थन नहीं करता है।

संबंधित मुद्दे