No se pudo cargar "librealm-jni.so"
Si su aplicación usa bibliotecas nativas que no son compatibles con arquitecturas de 64bits, Android no podrá cargar Realm.
librealm-jni.so Archivo en64 dispositivos ARM. Esto ocurre porque Android no puede cargar 32 64bibliotecas nativas de y bits simultáneamente. Idealmente, todas las bibliotecas podrían proporcionar el mismo conjunto de ABI compatibles, pero a veces esto no es posible al usar una 3biblioteca de terceros.
Para solucionar este problema, puedes excluir la biblioteca ARM64 de Realm del archivo APK añadiendo el siguiente código al build.gradle de la aplicación. Consulta "Combinar dependencias de 32y 64bits en Android" para obtener más información.
android { //... packagingOptions { exclude "lib/arm64-v8a/librealm-jni.so" } //... }
Tip
Para más información, consulte Combinación de dependencias de 32y 64bits en Android.
Llamadas de red a Mixpanel
Realm recopila análisis anónimos cuando ejecuta el transformador de bytecode de Realm en su código fuente. Esto es completamente anónimo y nos ayuda a mejorar el producto al señalar:
¿Qué versión del SDK utilizas?
¿Qué sistema operativo utilizas?
si tu aplicación usa Kotlin
Si su aplicación utiliza Realm o Sync solo local
Las analíticas no se ejecutan cuando la aplicación se ejecuta en los dispositivos de los usuarios, solo al compilar el código fuente. Para desactivar las analíticas, puede configurar la variable de entorno REALM_DISABLE_ANALYTICS en true.
Cambiar oyentes en Android 12 con versiones del SDK inferiores a 10.5.1
Debido a un cambio en el kernel de Linux, lasnotificaciones de objetos, colecciones y reinos no funcionan en versiones del SDK anteriores 10.5.1 a en dispositivos que ejecutan ciertas versiones anteriores de Android.12
Este cambio afecta a las versiones del kernel de Linux que empiezan por 5.5. La versión 5.14-rc4 del kernel de Linux solucionó el problema. La corrección también se incorporó a LTS 5.10.56 y LTS 5.13.8. Todas las ramas principales y LTS de Android 12 contienen la corrección o una versión retroactiva de la misma.
Si experimenta este problema, puede restaurar la funcionalidad de notificación con las siguientes correcciones:
actualizar a una versión del SDK posterior a 10.5.1.
actualizar a una versión de Android 12 que use una versión del kernel de Linux que contenga la corrección (confirmación del kernel
3a34b13a88caeb2800ab44a4918f230041b37dd9) o la versión retroactiva de la corrección (confirmación del kernel4b20d2de0b367bca627b49efd8d2e9e01bb66753).
Las configuraciones no pueden ser diferentes si se utilizan para abrir el mismo archivo
Realm ejecuta comprobaciones al abrir un archivo realm para evitar la corrupción. Para evitar abrir accidentalmente un archivo realm con configuraciones incompatibles, el SDK utiliza el equals() método de Java para comparar RealmConfiguration objetos. Esto evita que el SDK abra un mismo archivo realm con diferentes esquemas, niveles de durabilidad o configuraciones de escritura. Sin embargo, las configuraciones que incluyen funciones lambda, como las que se pasan a initialData() y compactOnLaunch(), pueden interrumpir esta equals() comparación, ya que dos lambdas diferentes nunca se consideran iguales mediante la comparación integrada de Java. Para evitar este error al usar lambdas, puede:
Almacene una única configuración de forma estática en su aplicación, de modo que las instancias de reino separadas usen exactamente el mismo objeto
RealmConfigurationy pase la verificación.Anular la comprobación de igualdad predeterminada de
RealmConfiguration:val config = RealmConfiguration.Builder() .initialData(object: Realm.Transaction { override fun execute(realm: Realm) { TODO("Not yet implemented") } override fun equals(other: Any?): Boolean { return true } override fun hashCode(): Int { return 37 } }).build()
Excepciones de Kapt durante las compilaciones
Si experimenta una excepción en la biblioteca Kapt con una descripción como la siguiente:
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
Lo más probable es que esto signifique que hay un problema con alguna de las clases de tu modelo. Las posibles causas incluyen:
Introducir un tipo de campo que no es compatible con el SDK
usar un tipo de visibilidad distinto de
openopublicpara una clase de modelo de objeto de reinousando una anotación de Realm en un campo incompatible
Si experimentas este error, revisa cualquier actualización reciente de tu esquema en busca de problemas.
Tamaño de la instalación
Una vez que tu aplicación se compile para la publicación y se divida para su distribución, el SDK solo debería agregar alrededor de 800KB a tu APK en la mayoría de los casos. Las versiones publicadas son significativamente más grandes porque incluyen soporte para más arquitecturas, como ARM7, ARMv7, ARM64, x86 y MIPS. El archivo APK contiene todos los arquitecturas compatibles, pero el instalador de Android solo instala código nativo para la arquitectura del dispositivo. Esto significa que la aplicación instalada es más pequeña que el tamaño del archivo APK.
Puedes reducir el tamaño del APK de Android dividiéndolo en una versión para cada arquitectura. Usa la compatibilidad con ABI Split de Android Build Tool añadiendo lo siguiente a tu build.gradle:
android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } }
Seleccione las arquitecturas que desea incluir para crear un APK separado para cada una.
Tip
Consulta la documentación de Android Tools sobre ABI Splits para obtener más información o el ejemplo en GitHub.
Si no desea gestionar varios APK, puede restringir el número de arquitecturas compatibles con un solo APK. Para ello, añada abiFilters a su build.gradle:
android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'mips', 'x86', 'x86_64' } } }
Personalizar las dependencias definidas por el complemento Gradle de Realm
Realm usa un complemento de Gradle porque facilita la configuración de un gran número de dependencias. Desafortunadamente, esto también dificulta un poco ignorar dependencias transitivas específicas.
Si desea personalizar Realm más allá de lo expuesto por el complemento, puede configurar manualmente todas las dependencias e ignorar el complemento de Gradle. El siguiente ejemplo muestra cómo configurar manualmente el SDK para una aplicación Android con Kotlin:
buildscript { ext.kotlin_version = '1.5.21' ext.realm_version = '10.18.0' repositories { jcenter() mavenCentral() } dependencies { classpath "io.realm:realm-transformer:$realm_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' import io.realm.transformer.RealmTransformer android.registerTransform(new RealmTransformer(project)) dependencies { api "io.realm:realm-annotations:$realm_version" api "io.realm:realm-android-library:$realm_version" api "io.realm:realm-android-kotlin-extensions:$realm_version" kapt "io.realm:realm-annotations-processor:$realm_version" }