UnsatisfiedLinkError, когда совместно используемая библиотека используется в Android Studio

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

@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 {
.....
}

1

Решение

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

Вполне нормально использовать готовые разделяемые библиотеки с проектом Android Studio и работать с ними через gradle.

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

2

Другие решения

Других решений пока нет …