У меня есть проект 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 {
.....
}
Это именно природа общих библиотек. Не существует обычной процедуры для «компиляции», связывания или иного преобразования общей библиотеки в более крупную (некоторые инструменты помогают разделять или сокращать общие библиотеки, но это другая история).
Вполне нормально использовать готовые разделяемые библиотеки с проектом Android Studio и работать с ними через gradle.
Самый простой способ — добавить путь к таким общим библиотекам в jniLibs.srcDirs
, Плагин Android скопирует соответствующие двоичные файлы в сгенерированный APK.
Других решений пока нет …