r16 - ¿Cómo puedo agregar archivos.so a un proyecto de biblioteca Android usando gradle 0.7+
ndk r13 (4)
Estructura del proyecto:
Proyecto de aplicación -> depende del proyecto de biblioteca
Library Project tiene una carpeta para las librerías jni compiladas
jniLibs.srcDirs = [''libs'']
Y he intentado agregar lo siguiente al elemento de android del build.gradle según la aplicación de ejemplo https://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradle los proyectos de la biblioteca de Android no son compatibles con productFlavours y, por lo tanto, el ensamblaje falla con "No se pudo encontrar el método productFlavors () para los argumentos [dghdhd] en el proyecto"
productFlavors {
x86 {
ndk {
abiFilter "x86"
}
}
arm {
ndk {
abiFilters "armeabi-v7a", "armeabi"
}
}
}
¿Hay alguna manera de agregar soporte ndk a un proyecto de biblioteca de Android?
Al final no necesité usar sabores de productos.
Para el proyecto de la biblioteca, agregué lo siguiente:
android {
sourceSets {
main {
jniLibs.srcDirs = [''libs'']
}
}
}
La carpeta libs tenía una carpeta dentro llamada "armeabi-v7a" y como este es mi único objetivo, funcionó muy bien.
Los archivos ndk (.so) se propagan en el proyecto de Android que utiliza el proyecto de la biblioteca de Android.
Ejemplo con el nuevo plugin gradle experimental android .
Requisitos:
- Android Studio 1.5+
- gradle-2.10
- gradle-experimental: 0.6.0-alpha5
1) Podría simplemente poner todas las bibliotecas nativas compartidas en la carpeta main / jniLibs , por defecto.
Estructura del proyecto
carpeta raíz / proyecto android
carpeta raíz / android_project / app / src / main / jniLibs / x86
carpeta raíz / android_project / app / src / main / jniLibs / armeabi-v7a
carpeta raíz / android_project / app / src / main / jniLibs / ...
Gradle los cargará automáticamente en el dispositivo.
Entonces podrías cargar la biblioteca en una aplicación.
static {
System.loadLibrary("mylibrary");
}
2) También podría colocar todas las bibliotecas nativas compartidas en la ubicación personalizada.
Ejemplo con una ruta al directorio bin / android / Debug .
En ese caso, debe establecer manualmente la ubicación de las bibliotecas en el archivo build.gradle .
Estructura del proyecto
carpeta raíz / proyecto android
carpeta raíz / bin / android / Debug / jniLibs / x86
carpeta raíz / bin / android / Debug / jniLibs / armeabi-v7a
carpeta raíz / bin / android / Debug / jniLibs / ...
carpeta raíz / 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"
}
}
}
}
}
}
Estoy trabajando con Android Studio 2.1, y descubrí que agregar las fuentes o la entrada sourceSets a mi build.gradle no tuvo ningún efecto aparente. En cambio, descubrí que necesitaba lo siguiente:
android {
defaultConfig {
ndk {
moduleName "libmp3lame"
}
}
Según este hilo:
https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8
no poder agregar archivos .so a los proyectos de la biblioteca fue un error que se corrigió en v0.8 del complemento.