Leí muchos hilos sobre cómo agregar una biblioteca * .so a Android Studio, pero ninguno de ellos funciona, especialmente cuando se trata del punto de texto: esto no funciona con el nuevo xxx (Android Studio, gradle, ...)
¿Podemos empezar de nuevo, por favor? Tengo:
Android Studio 0.6.0
De la estructura del proyecto veo:
Ubicación del SDK:
/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Proyecto:
Gradle version 1.10
Android Plugin Version 0.11.+
Módulos / aplicación: Propiedades:
Compile SDK versión 19 Herramientas de compilación versión 19.1.0
Dependencias:
{dir=libs, include=[*.jar]} Compile
{dir=libs, include=[*.so]} Provided
m com.android.support: appcompat -v7:19.+ Compile
Obtuve los archivos * .so precompilados y en la aplicación de demostración están funcionando. Tengo que cambiar el código fuente de la aplicación, así que necesito reconstruir con los mismos archivos * .so.
android
android-studio
Ronald Wiplinger
fuente
fuente
Respuestas:
Solución actual
Cree la carpeta
project/app/src/main/jniLibs
y luego coloque sus*.so
archivos dentro de sus carpetas abi en esa ubicación. P.ej,Solución obsoleta
Agregue ambos fragmentos de código en el archivo gradle.build de su módulo como una dependencia:
Cómo crear este jar personalizado:
La misma respuesta también se puede encontrar en la pregunta relacionada: Incluir la biblioteca .so en apk en el estudio de Android
fuente
Compile
La tarea ha quedado en desuso. Usar en suJavaCompile
lugar (de las respuestas relacionadas)jniLibs
ruta del directorio en la Guía del usuario de Gradle Plugin - Estructura del proyectoAgregar biblioteca .so en Android Studio 1.0.2
| --app:
| - | --src:
| - | - | --main
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Archivos
| - | - | - | - | --x86
| - | - | - | - | - | -. so Archivos
Referencia
https://github.com/commonsguy/sqlcipher-gradle/tree/master/src/main
fuente
Solución 1: creación de una carpeta JniLibs
Cree una carpeta llamada "jniLibs" en su aplicación y las carpetas que contienen su * .so dentro. La carpeta "jniLibs" debe crearse en la misma carpeta que las carpetas "Java" o "Activos".
Solución 2: modificación del archivo build.gradle
Si no desea crear una nueva carpeta y mantener sus archivos * .so en la carpeta libs, ¡es posible!
En ese caso, solo agregue sus archivos * .so en la carpeta libs (respete la misma arquitectura que la solución 1: libs / armeabi / .so por ejemplo) y modifique el archivo build.gradle de su aplicación para agregar el directorio fuente de los jniLibs.
Tendrás más explicaciones, con capturas de pantalla para ayudarte aquí (Paso 6):
http://blog.guillaumeagis.eu/setup-andengine-with-android-studio/
EDITAR Tenía que ser jniLibs.srcDirs, no jni.srcDirs, editó el código. El directorio puede ser una ruta [relativa] que apunte fuera del directorio del proyecto.
fuente
source Sets {
código debajo de laandroid {
sección* .so biblioteca en Android Studio
Tienes que generar la carpeta jniLibs dentro de main en proyectos de Android Studio y poner todos tus archivos .so dentro. También puede integrar esta línea en build.gradle
compilar fileTree (dir: 'libs', incluir: [' .jar', ' .so'])
Funciona perfectamente
| --app:
| - | --src:
| - | - | --principal
| - | - | - | --jniLibs
| - | - | - | - | --armeabi
| - | - | - | - | - | -. so Archivos
Esta es la estructura del proyecto.
fuente
Este es mi archivo build.gradle, tenga en cuenta la línea
Esto incluirá el archivo * .so de libs para apk.
fuente
hello-libs
Ejemplo de CMake oficial de Android NDKhttps://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs
Simplemente funcionó para mí en el host Ubuntu 17.10, Android Studio 3, Android SDK 26, por lo que le recomiendo que base su proyecto en él.
Se llama a la biblioteca compartida
libgperf
, las partes clave del código son:hello-libs / app / src / main / cpp / CMakeLists.txt :
app / build.gradle :
Luego, si miras debajo
/data/app
del dispositivo,libgperf.so
también estará allí.en código C ++, use:
#include <gperf.h>
ubicación del encabezado:
hello-libs/distribution/gperf/include/gperf.h
ubicación lib:
distribution/gperf/lib/arm64-v8a/libgperf.so
Si solo admite algunas arquitecturas, consulte: Gradle Build NDK solo objetivo ARM
El ejemplo git rastrea las bibliotecas compartidas preconstruidas, pero también contiene el sistema de compilación para compilarlas realmente: https://github.com/googlesamples/android-ndk/tree/840858984e1bb8a7fab37c1b7c571efbe7d6eb75/hello-libs/gen-libs
fuente
Para usar una biblioteca nativa (por lo tanto, archivos) Debe agregar algunos códigos en el archivo "build.gradle".
Este código es para limpiar el directorio "armeabi" y copiar archivos 'so' en "armeabi" mientras se 'limpia el proyecto'.
Me han referido a continuación. https://gist.github.com/pocmo/6461138
fuente
He resuelto un problema similar usando dependencias de lib nativas externas que se empaquetan dentro de los archivos jar. A veces, estas bibliotecas dependientes de la arquitectura se empaquetan en un solo contenedor, a veces se dividen en varios archivos jar. así que escribí un buildscript para escanear las dependencias jar de las bibliotecas nativas y ordenarlas en las carpetas de lib de Android correctas. Además, esto también proporciona una forma de descargar dependencias que no se encuentran en repositorios de Maven, que actualmente es útil para que JNA funcione en Android porque no todos los tarros nativos se publican en repositorios públicos de Maven.
fuente
Probé las soluciones en las respuestas anteriores, pero ninguna funcionó para mí. Tenía una biblioteca con archivos .so, .dll y .jar. Al final hice esto, puedes ver los detalles aquí: https://stackoverflow.com/a/54976458/7392868
Copié los archivos .so pegados en una carpeta llamada jniLibs y los pegué dentro de la carpeta app / src / main /. Para otras dependencias utilicé las dependencias de grado.
fuente