Gradle de Android, libs nativas para diferentes arquitecturas

Estoy tratando de construir apk universal para todas las arquitecturas. Aquí está mi estructura de proyecto:

-App -appModule -libraryModule -libs -armeabi -lib.so -src -java -jni 

Aquí está mi archivo gradle para libraryModule:

 apply plugin: 'com.android.library' // http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { ndk { moduleName "ProxyResolver" // <-- This is the name of AndroidProxy native module stl "gnustl_shared" cFlags "-std=c++11" abiFilters = ['armeabi'] ldLibs (projectDir.absolutePath + "/libs/armeabi/libresolver.so") } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } 

Como se puede ver el camino para la biblioteca es hardcoded . Y ahora mismo funciona en los procesadores de brazo-v7. Pero necesito agregar la ayuda de x86 sin agregar un sabor

2 Solutions collect form web for “Gradle de Android, libs nativas para diferentes arquitecturas”

Supongo:

 ndk { moduleName "resolver" stl "gnustl_shared" cFlags "-std=c++11" abiFilters = ['armeabi','arm-v7'] } 

Y eliminar

 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 

El ajuste de abiFilters en su defaultConfig sólo agrega información a las capacidades de la aplicación (sólo es útil para el instalador, es decir, el instalador da un error cuando el dispositivo que intenta instalar no es compatible) y no cambia qué binarios se agregan al apk final, Consulte también https://stackoverflow.com/a/39445685/1827156 .

Supongo que lo que quieres lograr es tener diferentes apk para diferentes arquitecturas. Este es un uso común, es decir, para reducir los tamaños de construcción. Puede lograr esto mediante el uso de splits en build.gradle su aplicación. Consulte https://developer.android.com/studio/build/configure-apk-splits.html .

Recomiendo encarecidamente https://www.neotechsoftware.com/blog/native-libraries-part-i-common-pitfalls (no soy el autor).

Nota sobre el trabajo con bibliotecas / aar s: Sin embargo, hay una falla importante cuando se trabaja con bibliotecas ( aar lugar de apk ). Imho, no se puede (automágicamente) crear diferentes ABI específicos aar s. En su lugar, crea aar s que contiene los binarios para todos los ABI. Al agregar el aar a una aplicación de Android, se especifican splits en las aplicaciones build.gradle como se mencionó anteriormente.

  • ¿Por qué algunos teléfonos Android hacen que nuestra aplicación lance un java.lang.UnsatisfiedLinkError?
  • Desactivar la animación de desplazamiento de ViewPager
  • ¿Cómo empaquete los archivos .so en mi archivo .aar?
  • java no puede encontrar clases de android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.