teléfono - instalar android 64 bits
Cómo usar bibliotecas nativas de 32 bits en un dispositivo Android de 64 bits (2)
Utilizo una biblioteca nativa en mi aplicación que solo está compilada para armeabi, armeabi-v7a y x86.
Cuando esta biblioteca se carga en un dispositivo de 64 bits como el Samsung S6, la aplicación se bloquea con un error de enlace insatisfecho
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn''t find "libfoo.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
La biblioteca es de código cerrado por desgracia. ¿Hay alguna forma de solucionar esto sin recompilar la biblioteca con objetivos de 64 bits?
Cuando instala un APK en Android, el sistema buscará directorios de bibliotecas nativas (armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips) dentro de la carpeta
lib
del APK, en el orden determinado por
Build.SUPPORTED_ABIS
.
Si su aplicación tiene un directorio
arm64-v8a
con libs faltantes, las libs faltantes no se instalarán desde otro directorio, las libs no se mezclan.
Eso significa que debe proporcionar el conjunto completo de sus bibliotecas para cada arquitectura.
Entonces, para resolver su problema, puede eliminar sus bibliotecas de 64 bits de su compilación, o configurar abiFilters para empaquetar solo arquitecturas de 32 bits:
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
La respuesta anterior ayudará a generar una compilación con 32 bits, no solo con 64 bits. Si está utilizando [abiFilters "armeabi", "armeabi-v7a", "x86", "mips"]. generar apk firmado significa, que no es para 64 bits. Aparecerá un error cuando carguemos en la tienda Google Play. No es una compilación de 64 bits.