¿Cómo importar sólo ABI de bibliotecas nativas seleccionadas de AAR?

Tengo un problema poco inusual: mi aplicación para Android contiene libs nativas y construyo libs nativas para armeabi-v7a y x86. Sin embargo, ahora necesito integrar una biblioteca de terceros en mi aplicación que también contiene bibliotecas nativas (la biblioteca de terceros es Crashlytics que incluí a través de Maven desde mi build.gradle). El problema es que el AAR de la biblioteca de terceros proporciona todas las arquitecturas (armeabi, arm64-v8a, armeabi-v7a, mips, mips64, x86 y x86_64) y mi app solo soporta armeabi-v7a y x86 (arm64-v8a está planeado para el futuro cercano) , Así que cuando apk final se construye contiene biblioteca de terceros todos los ABI y sólo ABI x86 y armeabi-v7a de mi código nativo. Esto hace que mi aplicación se bloquee cuando se inicia en el dispositivo arm64 como Galaxy S6.

Mi pregunta es: ¿es posible incluir sólo ABI seleccionados de AAR de terceros?

Tenga en cuenta que conozco las particiones de APK , pero esto solo soluciona parcialmente mi problema, es decir, sólo funciona si distribuyo mi aplicación a través de Play Store. Aunque Play Store admite la distribución de pruebas beta, la propagación del APK actualizado es bastante lenta, por lo que antes de empujar una actualización al canal beta PlayStore de la aplicación, presionamos una actualización a través del sistema de distribución beta de Crashlytics, que es mucho más rápido. El problema es que el sistema de distibution de Crashlytics no soporta splits de APK (o estoy equivocado?). Por lo tanto, realmente necesito construir un APK "universal" que contendrá sólo ABIs seleccionados. ¿Cómo lograrlo?

Aunque estaría satisfecho incluso con las respuestas específicas de Crashlytics (como por ejemplo, cómo distribuir las divisiones APK a través de su canal beta), estaría mucho más satisfecho con la solución para la construcción de APK "universal" que sólo contiene ABIs seleccionados, porque al Nuestra empresa también proporcionamos SDKs a nuestros clientes como archivos AAR que contienen sólo arquitecturas soportadas y nos gustaría instruirlos cómo manejar el caso cuando integran nuestro SDK con otros SDKs que tienen diferentes ABI's soportados.

Estoy usando el último estudio Android estable (1.2.1.1), gradle 2.4 y plugin androide gradle versión 1.2.3.

 packagingOptions { exclude 'lib/arm64-v8a/libcrashlytics-envelope.so' exclude 'lib/arm64-v8a/libcrashlytics.so' exclude 'lib/armeabi/libcrashlytics-envelope.so' exclude 'lib/armeabi/libcrashlytics.so' exclude 'lib/mips64/libcrashlytics-envelope.so' exclude 'lib/mips64/libcrashlytics.so' exclude 'lib/mips/libcrashlytics-envelope.so' exclude 'lib/mips/libcrashlytics.so' exclude 'lib/x86_64/libcrashlytics-envelope.so' exclude 'lib/x86_64/libcrashlytics.so' } 

Esto funciona para mí:

(Por ejemplo: sólo armeabi y armeabi-v7a )

Construir un gradiente

 android{ defaultConfig{ ndk{ abiFilters "armeabi", "armeabi-v7a" } } } 

Gradle.properties

 android.useDeprecatedNdk=true; 

Mike de Fabric y Crashlytics aquí. Con Splits, actualmente, no sabemos de antemano qué densidad proporcionar al probador, por lo que sólo agregue esta línea a su sabor o variante específico, para utilizar el APK universal que se genera.

Ext.betaDistributionApkFilePath = "ruta de acceso a la partición universal APK"

Además, si está utilizando informes de fallos NDK, en caso de que coincida con el bloqueo que está viendo, eche un vistazo a este enlace.

Tuve el mismo problema que tú, pero en realidad me ayudaste con el enlace que publicaste sobre APK Splits ! En su caso, intente agregar lo siguiente a su build.gradle dentro del cierre de android :

  splits { abi { enable true reset() include 'armeabi-v7a', 'x86' universalApk true } } 

El truco es ajustar el universalApk a true para generar sólo un APK con todas las arquitecturas definidas, en lugar de dividirlas en varios APK.

  • ¿Cómo copiar o usar bibliotecas nativas con Android Studio Gradle?
  • ¿Existe un equivalente de aspectoj-maven-plugin para gradle que funciona en android?
  • ¿Puedo usar Widgets de la biblioteca de soporte de Android L Preview en la versión actual de Android?
  • Gradle maven dependencia no se encuentra si el complemento es android-library
  • ¿Cómo configurar Proguard usando Gradle?
  • java.lang.NoClassDefFoundError: android.support.v7.app.AppCompatDelegateImplV14 al actualizar a appcompat v23 - Android Studio
  • Utilice un campo local.properties al declarar un archivo buildConfigField
  • Trabajo de Jenkins usando Gradle no puede encontrar ejecutable
  • ¿Cómo gradle maneja multi módulos con diferentes versiones de la biblioteca de soporte v4?
  • La sincronización del proyecto de Gradle de Android falló debido a la versión de destino
  • Cómo construir una biblioteca de Android con Android Studio y gradle?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.