2017-02-02 6 views
0

Я пытаюсь запустить this проекта .every время я запустить проект я получаю ошибку ниже:java.lang.UnsatisfiedLinkError при загрузке так библиотека в Android Studio

java.lang.UnsatisfiedLinkError: dlopen не удалось:/данные /app/path.androidspeakerrec-1/lib/arm/libndkspeaker.so: имеет текстовые ссылки

Проект не загружает * .so файлы. Я изменил местоположение файла с libs на jniLibs, но все равно получаю ту же проблему.

Сложение .gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.2" 
    defaultConfig { 
     applicationId "com.sharannya.androidspeakerrec" 
     minSdkVersion 15 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
     externalNativeBuild { 
      cmake { 
       cppFlags "" 
      } 
     } 
     ndk { 
      abiFilters "armeabi-v7a","armeabi" 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    externalNativeBuild { 
     cmake { 
      path "CMakeLists.txt" 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.1.0' 
    testCompile 'junit:junit:4.12' 
} 

вызовов из кода Java

static { 
     try { 
      System.loadLibrary("ndkspeaker"); 
     } catch (UnsatisfiedLinkError e) { 
      Log.e("Error in loading lib","Native code library failed to load" + e); 
     } 

    } 

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 

LOCAL_MODULE := ndkspeaker 
LOCAL_LDLIBS := -llog 
LOCAL_SRC_FILES := lib_mfcc/abs.c \ 
        lib_mfcc/abs1.c \ 
        lib_mfcc/fft.c \ 
        lib_mfcc/fi_fft.c \ 
        lib_mfcc/fi_mfcc.c \ 
        lib_mfcc/fi_mfcc_initialize.c \ 
        lib_mfcc/fi_mfcc_rtwutil.c \ 
        lib_mfcc/fi_mfcc_terminate.c \ 
        lib_mfcc/log.c \ 
        lib_mfcc/mfcc_bare.c \ 
        lib_mfcc/mtimes1.c \ 
        lib_mfcc/power1.c \ 
        lib_mfcc/rt_nonfinite.c \ 
        lib_mfcc/rtGetInf.c \ 
        lib_mfcc/rtGetNaN.c \ 
        lib_mfcc/sqrt.c \ 
        lib_mfcc/sum.c \ 
        SpeakerRecognizer.c 

APP_ABI := armeabi 

include $(BUILD_SHARED_LIBRARY) 

.so файл находится в проекте/приложение/SRC/главная/jniLibs/armeabi и проект/приложение/src/main/jniLibs/armeabi-v7a

Как это исправить?

ответ

0

Возможно, вам придется установить «jniLibs.srcDirs» в файле градиента. Вы можете взглянуть сюда - на самом деле, код в вопросе должен вам помочь: How to setup NDK libs path in Gradle?

0

После некоторого времени перекопания в код я получил решение проблемы.

Проект, который я пытался запустить, был более старым проектом с Android mk ndk build. Так я удалил всю папку cpp, cmake-файл из проекта.

Затем щелкнул правой кнопкой мыши по библиотекам и выбрал опцию «Ссылка C++ с градиентом». При щелчке по опции он отобразит окно для выбора типа системы сборки. Выберите «ndk build» и свяжите путь Android.mk к проекту.