usar studio modulos librerias library importar generate create crear biblioteca aƱadir android gradle android-studio

modulos - Incluye.so library en apk en android studio



librerias de android studio (3)

Para incluir bibliotecas nativas que necesita:

  1. crear un archivo "jar" con una estructura especial que contenga archivos ".so";
  2. incluir ese archivo en la lista de dependencias.

Para crear un archivo jar, use el siguiente fragmento de código:

task nativeLibsToJar(type: Zip, description: ''create a jar archive of the native libs'') { destinationDir file("$buildDir/native-libs") baseName ''native-libs'' extension ''jar'' from fileTree(dir: ''libs'', include: ''**/*.so'') into ''lib/'' } tasks.withType(Compile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) }

Para incluir el archivo resultante, pegue la siguiente línea en la sección "dependencias" en el archivo "build.gradle":

compile fileTree(dir: "$buildDir/native-libs", include: ''native-libs.jar'')

Esta pregunta ya tiene una respuesta aquí:

Estoy intentando desarrollar una aplicación de Android simple en la que estoy tratando de usar sqlcipher , que usa las bibliotecas .so internamente. He leído la documentación sobre cómo usar sqlcipher con la aplicación de Android . He seguido los pasos y se compila sin ningún error. Pero, en tiempo de ejecución arroja UnsatisfiedLinkError .

Buscando en Google, descubrí que, gradle aún no es compatible con .so libraries , pero encontré un hack here que estoy tratando de usar. Pero arroja error de tiempo de compilación en la línea # 40 en la esencia que es,

tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask -> pkgTask.jniDir new File(buildDir, ''native-libs'') }

diciendo

No se pudo encontrar la propiedad ''com'' en el Proyecto ''MyProject''

Aquí estoy publicando código de mi archivo build.gradle.

buildscript { repositories { maven { url ''http://repo1.maven.org/maven2'' } } dependencies { classpath ''com.android.tools.build:gradle:0.4'' } } apply plugin: ''android'' dependencies { compile files(''libs/android-support-v4.jar'') compile files(''libs/commons-codec.jar'') compile files(''libs/guava-r09.jar'') compile files(''libs/sqlcipher.jar'') } targetCompatibility = 1.6 sourceCompatibility = 1.6 android { target = ''android-14'' compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 9 targetSdkVersion 16 } } task copyNativeLibs(type: Copy) { from(new File(project('':MyProject'').buildDir, ''native-libs'')) { include ''**/*.so'' } into new File(buildDir, ''native-libs'') } tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn ''cleanCopyNativeLibs'' tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask -> pkgTask.jniDir new File(buildDir, ''native-libs'') }

¿Puede alguien ayudarme en lo que he hecho mal o qué debo hacer para incluir esas bibliotecas .so en mi apk?

Como soy nuevo en el desarrollo de Android y gradle, discúlpame si he entendido mal algo.


Probé la solución presentada en la respuesta aceptada y no funcionó para mí. Quería compartir lo que funcionó para mí, ya que podría ayudar a alguien más. Encontré esta solución here .

Básicamente lo que tienes que hacer es colocar tus archivos .so dentro de una carpeta llamada lib (Nota: no son libs y esto no es un error). Debe estar en la misma estructura que debería estar en el archivo APK .

En mi caso fue:
Proyecto:
| --lib:
| - | --armeabi:
| - | - | -. so archivos.

Así que hice una carpeta lib y dentro de ella una carpeta armeabi donde inserté todos los archivos .so necesarios. Luego comprimí la carpeta en un .zip (la estructura dentro del archivo zip ahora es lib / armeabi / *. Entonces) armeabi.jar archivo .zip en armeabi.jar y agregué la compile fileTree(dir: ''libs'', include: ''*.jar'') línea compile fileTree(dir: ''libs'', include: ''*.jar'') en dependencies {} en el archivo de compilación de gradle.

Esto resolvió mi problema de una manera bastante limpia.