Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿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?

  • ¿Qué plataforma móvil debo comenzar a aprender?
  • Evento de clic de botón para el widget android
  • ¿Qué es una Biblioteca de soporte de Android?
  • La aplicación Detectar Android se está ejecutando en modo de depuración
  • Facturación en aplicaciones v3 imposible de consultar elementos sin conexión de red o en modo avión / vuelo
  • Cómo detener asynctask hilo en Android?
  • 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.

  • ¿Qué es el archivo de keystore de Android, y para qué se utiliza?
  • Cómo setSupportActionBar en una vista que extiende LifecycleActivity
  • La pantalla de bloqueo se muestra entre las actividades
  • Establecer el título de la barra de herramientas
  • ¿Cómo convertir un pdf a una imagen?
  • Espresso ¿cómo probar si la actividad está terminada?
  • 4 Solutions collect form web for “¿Cómo importar sólo ABI de bibliotecas nativas seleccionadas de AAR?”

     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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.