Ошибка при загрузке android-aarch64 / libmongo_embedded_capi.so для MongoDB Mobile - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь использовать MongoDB Mobile (бета) в своем приложении для Android. Я следовал за шагами как описано здесь

Это код, который выполняется:

final StitchAppClient client = Stitch.initializeDefaultAppClient("<APP ID>");

final MongoClient mobileClient = client.getServiceClient(LocalMongoDbService.clientFactory);

первая строка работает, но при выполнении второй строки приложение вылетает с этой ошибкой:

 com.mongodb.embedded.client.MongoClientEmbeddedException: Failed to load the mongodb library: 'mongo_embedded_capi'.
     Unable to load library 'mongo_embedded_capi': Native library (android-aarch64/libmongo_embedded_capi.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.

Эта библиотека не включена в загрузку, предоставляемую mongoDB, но по-прежнему необходима. Я что-то делаю не так или это проблема mongoDB.

Устройство, которое я использую, - это Oneplus 6 с библиотеками arm64-v8a из mongoDB в этом месте: app\src\main\jniLibs\arm64-v8a

для справки, это мой build.gradle:

build.gradle (Проект: Приложение):

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle (Модуль: Приложение):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.mikakrooswijk.led"
        minSdkVersion 24
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    } }

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.volley:volley:1.0.0'
    implementation 'com.jjoe64:graphview:4.2.2'
    implementation 'org.mongodb:stitch-android-sdk:4+'
    implementation 'org.mongodb:stitch-android-services-mongodb-local:4+'

}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

К сожалению, ответ @shizhen не сработал для меня. В итоге сработало переименование библиотеки, предоставленной mongoDB. Я переименовал библиотеку libmongoc_embedded.so в libmongo_embedded_capi.so, и она отлично работает.

Я предполагаю, что это одна и та же библиотека с другим именем. Он был изменен при загрузке с mongoDB, но не в коде Java, mongoDB Mobile все еще находится в бета-версии. Я не знаю много о mongoDB Mobile или Stitch, так что это может быть неверно, но это решило проблему для меня.

0 голосов
/ 31 октября 2018

Снизу журнал ошибок

Установка системного свойства 'jna.library.path'

Похоже, вы пропустили зависимости JNA для вашего проекта.

Попробуйте выполнить следующие шаги:

  • Добавьте зависимости JNA в ваш build.gradle

    dependencies {
        ...
        // JNA dependency
        implementation 'net.java.dev.jna:jna:4.5.0'
        ...
    }
    
  • Включите общую библиотеку libjnidispatch.so для всех Android ABI, которые поддерживает ваш проект.

    • Перейдите к библиотекам JNA .
    • В версии 4.5.0 скачать zip-архив
    • Распакуйте пакет, перейдите в каталог jna-4.5.0/dist/. libjnidispatch.so для разных ABI можно извлечь из соответствующего файла JAR. Отображение, как показано ниже, показано в таблице ниже.

      | JNA ABI             | Android ABI   |
      | ------------------- | ------------- |
      | android-aarch64.jar | arm64-v8a     |
      | android-armv7.jar   | armeabi-v7a   |
      | android-x86-64.jar  | x86_64        |
      | android-x86.jar     | x86           |
      
    • Поместите libjnidispatch.so в сопоставленную папку Android ABI, например, arm64-v8a, armeabi-v7a, x86 и x86_64.

...