2015-10-12 4 views
1

У меня есть проект NDK в Android студии, которая добавляет и вычитает 2 номераUnsatisfiedLinkError когда разделяемая библиотека является используемый в Android Studio

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

     JniAdapter jniAdapter = new JniAdapter(); 
     Log.d(LOG_TAG, "Sum of 1 and 1 is: " + jniAdapter.add(1, 1)); 
     Log.d(LOG_TAG, "Difference of 1 and 1 is: " + jniAdapter.subtract(1, 1)); 
    } 

Операция добавления обеспечивается внешним статической библиотеки и вычитание с помощью внешняя общая библиотека, которые были построены с помощью ol'school ndk-build; Я хочу, чтобы мой файл gradle скомпилировал эти две библиотеки и создал другую общую библиотеку. Но похоже, что статическая библиотека скомпилирована, но не разделяемая библиотека, и я получаю UnSatifiedLinkError для общей библиотеки. Без общей библиотеки все работает нормально. Что происходит не так?

Мой Gradle файл

apply plugin: 'com.android.model.application' 

model { 
    android { 
     ..... 

     defaultConfig.with { 
      ....... 
     } 
    } 
    android.ndk { 
     moduleName = "native" 
     ldLibs += ["mySharedLib"] 
     ldLibs += ["myStaticLib"] 
     cppFlags += "-I${staticLibIncludeRoot}".toString() 
     cppFlags += "-I${sharedLibIncludeRoot}".toString() 
    } 
    android.productFlavors { 
     create ("arm7") { 
      ndk.abiFilters += "armeabi-v7a" 
      ndk.ldFlags += "-L${staticLibRoot}/armeabi-v7a".toString() 
      ndk.ldFlags += "-L${sharedLibRoot}/armeabi-v7a".toString() 
     } 
    } 
} 
dependencies { 
    ..... 
} 

ответ

2

Это именно природа общих библиотек. Обычной процедуры «компилировать», связывать или иным образом конвертировать общую библиотеку в более крупную (обычная процедура) не требуется (некоторые инструменты помогают разделить или сжать общие библиотеки, но это совсем другая история).

Совершенно нормально использовать готовые совместно используемые библиотеки с проектом Android Studio и обрабатывать их через gradle.

Самый простой способ - добавить путь к таким разделяемым библиотекам в jniLibs.srcDirs. Плагин Android скопирует соответствующие двоичные файлы в сгенерированный APK.

Смежные вопросы