Используйте .So файл в андроид студии - PullRequest
0 голосов
/ 23 сентября 2019

Я разрабатываю приложение для устройства , которое имеет SDK для себя.

Когда я пытаюсь импортировать его SDK как библиотеку в моем приложении, я получуошибка, как показано ниже:

E/MultiWindowProxy: getServiceInstance failed!
E/MultiWindowProxy: getServiceInstance failed!
E/AndroidRuntime: FATAL EXCEPTION: Thread-571
    Process: cards.mena.app, PID: 9484
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/cards.mena.app-2/base.apk"],nativeLibraryDirectories=[/data/app/cards.mena.app-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libserial_port.so"
        at java.lang.Runtime.loadLibrary(Runtime.java:367)
        at java.lang.System.loadLibrary(System.java:1076)
        at android_serialport_api.SerialPort.<clinit>(Unknown Source)
        at com.rt.printerlibrary.driver.serialport.ComDriver.a(Unknown Source)
        at com.rt.printerlibrary.driver.serialport.ComDriver.run(Unknown Source)

Я поместил файл .Jar и .so в папку libs в моем приложении, как показано ниже:

enter image description here

И это мой Gradle файл:

android {

    compileSdkVersion 28
    defaultConfig {
        applicationId "cards.mena.app"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 10002
        versionName "1.0.2"
        setProperty("archivesBaseName", "MenaCards-v$versionName")
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }


    dataBinding {
        enabled = true
    }


    sourceSets {
        main {
//            manifest.srcFile 'AndroidManifest.xml'
            jniLibs.srcDirs = ['libs']
            //    java.srcDirs = ['src']
//            resources.srcDirs = ['src']
            assets.srcDirs = ['assets']
        }


    }

}

androidExtensions {
    experimental = true
}

kapt {
    generateStubs = true
}


dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation "org.jetbrains.anko:anko-commons:0.10.8"

    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:design:$supportLibraryVersion"

    /*----------------/ Printer Libs \---------------------------*/
    implementation files('libs/printer_library_ap02.jar')

Обновление: Я понижаю свою версию Gradle с 3.5.0 до 2.3.2 и мое приложение работает!

Тогда проблема в Gradle!Что мне с этим делать?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Я нашел проблему и ответ.

Проблема была в версии Gradle, и мне пришлось добавить эту строку:

defaultConfig {
    ndk {
        abiFilters 'armeabi'
    }
}
0 голосов
/ 23 сентября 2019

Я помещаю свои .so файлы в src > main > jniLibs и в зависимые от архитектуры подпапки arm64-v8a, armeabi-v7a, ....Тогда не нужно дополнительной настройки.Может быть, это поможет вам.

...