android - mejores - ¿Cómo importar solo las ABI de bibliotecas nativas seleccionadas de AAR?
librerias android studio (4)
Esto funciona para mí:
(por ejemplo: solo armeabi y armeabi-v7a )
construir.gradle
android{
defaultConfig{
ndk{
abiFilters "armeabi", "armeabi-v7a"
}
}
}
Tengo un pequeño problema inusual: mi aplicación de Android contiene librerías nativas y compilo 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 Crashlytics 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 aplicación solo es compatible con armeabi-v7a y x86 (arm64-v8a está planeado para el futuro próximo) , así que cuando se crea el apk final, contiene todas las ABI de la biblioteca de terceros y solo las ABI de x86 y armeabi-v7a de mi código nativo. Esto hace que mi aplicación se bloquee cuando se inicie en un dispositivo arm64 como el Galaxy S6.
Mi pregunta es: ¿es posible incluir solo ABI seleccionados de AAR de terceros?
Tenga en cuenta que soy consciente de las divisiones de APK , pero esto solo resuelve mi problema parcialmente, es decir, solo funciona si distribuyo mi aplicación a través de Play Store. Aunque Play Store es compatible con la distribución de pruebas beta, la propagación de APK actualizado es bastante lenta, por lo que antes de enviar una actualización al canal beta de PlayStore de la aplicación, realizamos 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 distribución de Crashlytics no admite divisiones de APK (¿o me equivoco?). Por lo tanto, realmente necesito crear un APK "universal" que contendrá solo los ABI seleccionados. ¿Cómo lograr eso?
Aunque estaría satisfecho incluso con las respuestas específicas de Crashlytics (como, por ejemplo, cómo distribuir las divisiones de APK a través de su canal beta), estaría mucho más satisfecho con la solución para crear APK "universal" que contenga solo ABI seleccionados, porque en nuestra empresa también proporciona SDK a nuestros clientes como archivos AAR que solo contienen arquitecturas compatibles y nos gustaría que aprendan cómo manejar el caso cuando integran nuestro SDK con otros SDK que tienen diferentes ABI.
Estoy usando la última versión estable de Android studio (1.2.1.1), gradle 2.4 y android gradle plugin versión 1.2.3.
Mike de Fabric and Crashlytics aquí. Con Splits, actualmente, no sabemos de antemano qué densidad proporcionar al probador, así que solo agregue esta línea a su sabor o variante específica, para usar el APK universal que se genera.
ext.betaDistributionApkFilePath = "ruta a la división universal APK"
Además, si está utilizando el informe de fallo NDK, en caso de que coincida con el bloqueo que está viendo, consulte 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 allí es establecer universalApk
en true
para generar solo un APK con todas las arquitecturas definidas, en lugar de dividirlas en varios APK.
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''
}