首页 > 解决方案 > 在资源路径 (.) 中找不到 Android-Native 库 (com/sun/jna/android-x86/libjnidispatch.so)

问题描述

我正在使用 MongoDB Stitch 开发我的 android 应用程序,它有一个先决条件,我需要安装 MongoDB Mobile Tarball。安装结构

安装后我运行程序,得到这个异常:

08-09 13:01:34.308 20251-20278/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: io.datats.datatungshing.app, PID: 20251
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:354)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
        at java.util.concurrent.FutureTask.run(FutureTask.java:271)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: com.mongodb.embedded.client.MongoClientEmbeddedException: Failed to load the mongodb library: 'mongo_embedded_capi'.
     Native library (com/sun/jna/android-x86/libjnidispatch.so) not found in resource path (.) 

     Please set the library location by either:
     - Adding it to the classpath.
     - Setting 'jna.library.path' system property
     - Configuring it in the 'MongoEmbeddedSettings.builder().libraryPath' method.

        at com.mongodb.embedded.client.MongoDBCAPIHelper.init(MongoDBCAPIHelper.java:60)
        at com.mongodb.embedded.client.MongoClients.init(MongoClients.java:38)
        at com.mongodb.stitch.core.services.mongodb.local.internal.CoreLocalMongoDbService.getClient(CoreLocalMongoDbService.java:36)
        at com.mongodb.stitch.android.services.mongodb.local.LocalMongoDbService.access$000(LocalMongoDbService.java:35)
        at com.mongodb.stitch.android.services.mongodb.local.LocalMongoDbService$1.getClient(LocalMongoDbService.java:50)
        at com.mongodb.stitch.android.services.mongodb.local.LocalMongoDbService$1.getClient(LocalMongoDbService.java:41)
        at com.mongodb.stitch.android.core.internal.StitchAppClientImpl.getServiceClient(StitchAppClientImpl.java:105)
        at io.datats.datatungshing.forboledts.SecondActivity$getTrendFromDB.doInBackground(SecondActivity.java:57)
        at io.datats.datatungshing.forboledts.SecondActivity$getTrendFromDB.doInBackground(SecondActivity.java:37)
        at android.os.AsyncTask$2.call(AsyncTask.java:333)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
            ... 4 more
     Caused by: java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-x86/libjnidispatch.so) not found in resource path (.)
        at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:962)
        at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:922)
        at com.sun.jna.Native.<clinit>(Native.java:190)
        at com.sun.jna.Native.loadLibrary(Native.java:544)
        at com.mongodb.embedded.client.MongoDBCAPIHelper.init(MongoDBCAPIHelper.java:58)
            ... 14 more

突出显示的代码在我的 AsyncTask 中,它只是在我的 java 程序中创建了一个 MongoClient:

    final StitchAppClient client =
            Stitch.initializeDefaultAppClient("APP-ID");
    final MongoClient mobileClient =
            client.getServiceClient(LocalMongoDbService.clientFactory);
    MongoCollection<Document> localCollection =
            mobileClient.getDatabase(databaseName).getCollection("CollectionName");
    /*Document doc = localCollection.find().first();
    this.keywordList = (List<String>) doc.get("list");*/
    return true;

我还在我的 src/main/ 中创建并包含了一个 jniLibs 目录,其中包含以下组件: jniLibs

在我的 jniLibs 中,我还包含了 libjnidispatch.io 文件。请帮助我解决这个奇怪的错误。我使用的模拟器是 Nexus 6 API 28。谢谢!!!

标签: androidmongodbjava-native-interface

解决方案


推荐阅读