Как я могу добавить файлы .so в проект библиотеки андроидов, используя gradle 0.7+
Структура проекта:
Проект приложения → зависит от проекта библиотеки
Проект библиотеки
имеет папку для скомпилированных jni libs
jniLibs.srcDirs = ['libs']
И я попытался добавить следующее к элементу android элемента build.gradle в соответствии с примером app https://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradle, однако проекты библиотек Android не поддерживают productFlavours и, как таковая, сборка завершается с ошибкой "Не удалось найти метод productFlavors() для аргументов [dghdhd] в проекте"
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilters "armeabi-v7a", "armeabi"
}
}
}
Есть ли способ добавить поддержку ndk в проект библиотеки Android?
Ответы
Ответ 1
В конце концов, мне не нужно было использовать ароматы продукта.
Для проекта библиотеки я добавил следующее:
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
В папке libs была папка внутри "armeabi-v7a", и поскольку это моя единственная цель, она сработала.
Файлы ndk (.so) распространяются в проект андроида, который использует проект библиотеки андроида.
Ответ 2
Пример с новым андроидным экспериментальным плагином gradle.
Требования:
- Android Studio 1.5 +
- gradle -2,10
- gradle -experimental: 0.6.0-alpha5
1) По умолчанию вы можете поместить все общие собственные библиотеки в папку main/jniLibs.
Структура проекта
файл корневой папки/андроида
корневая папка /android _project/app/src/main/jniLibs/x86
корневая папка /android _project/app/src/main/jniLibs/armeabi-v7a
корневая папка /android _project/app/src/main/jniLibs/...
Gradle автоматически загрузит их на устройство.
Затем вы можете загрузить библиотеку в приложение.
static {
System.loadLibrary("mylibrary");
}
2) Вы также можете поместить все общие собственные библиотеки в настраиваемое местоположение.
Пример с указанием пути к каталогу bin/android/Debug.
В этом случае вы должны вручную установить расположение библиотек в файле build.gradle.
Структура проекта
файл корневой папки/андроида
корневая папка /bin/android/Debug/jniLibs/x 86
корневая папка /bin/android/Debug/jniLibs/armeabi -v7a
корневая папка /bin/android/Debug/jniLibs/...
корневая папка /android _project/app/build.gradle
apply plugin: 'com.android.model.application'
model {
android {
sources {
main {
jni {
source {
srcDirs = []
}
}
jniLibs {
source {
srcDirs "/../../bin/android/Debug/jniLibs"
}
}
}
}
}
}
Ответ 3
Я работаю с Android Studio 2.1, и я обнаружил, что добавление записи source или sourceSets в мой build.gradle не имеет никакого видимого эффекта. Вместо этого я обнаружил, что мне нужно следующее:
android {
defaultConfig {
ndk {
moduleName "libmp3lame"
}
}
Ответ 4
Согласно этой теме:
https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8
не удалось добавить файлы .so в библиотеки, была ошибкой, которая была исправлена в v0.8 плагина.