¿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?
- Después de un fallo en el suministro de energía, ya no puedo compilar la aplicación
- Obtener el nombre del paquete de la variante de aplicación en el complemento gradle
- "Error: Atributo" estilo "ya se ha definido" error después de añadir facebook sdk de Maven
- No se puede resolver el símbolo 'Auth' para la integración de Google en android studio
- ¿Depurar un proyecto Java basado en gradle en Android Studio?
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.
- Excepción intentando ejecutar la aplicación Android de Eclipse a Android Studio
- Android studio dice "Empty Test Suite" para AndroidTestCase
- ¿Cuál es la mejor práctica para compartir clases entre una aplicación de Wear y Android?
- Archivo de cobertura de código Jacoco vacío que conduce a informes de cobertura falsa
- Gradle - recopilación de módulos selectivos (reutilización jar de lo contrario)
- Gradle buildConfigField con una variable entera
- No se puede construir el proyecto de biblioteca Bintray Gradle - ClassNotFoundException
- Cómo configurar la JVM de Gradle en Android Studio 1.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.
- WakeLock finalizó mientras seguía teniendo error aunque lo estoy lanzando
- Ejemplo más simple de un fondo de pantalla Android en vivo