Fresco: java.lang.UnsatisfiedLinkError no pudo encontrar DSO para cargar: libimagepipeline.so

Creado en 23 mar. 2018  ·  9Comentarios  ·  Fuente: facebook/fresco

Info:

  • Versión Fresco
  • Versión de la plataforma: Vivo Android 5.1.1, CPU: arm64-v8a

no se pudo encontrar DSO para cargar: libimagepipeline.so
com.facebook.soloader.SoLoader.void doLoadLibraryBySoName (java.lang.String, int, android.os.StrictMode $ ThreadPolicy) ...
03-23 ​​19: 21: 55.955 17814 17931 E art: dlopen ("/ data / data / xxx / lib-main / libimagepipeline.so", RTLD_LAZY) falló: dlopen falló: "/ data / data / xxx / lib-main /libimagepipeline.so "es de 64 bits en lugar de 32 bits
03-23 ​​19: 21: 55.955 17814 17931 E SoLoader: No se pudo cargar: libimagepipeline.so

detalle

com.facebook.soloader.SoLoader.void doLoadLibraryBySoName (java.lang.String, int, android.os.StrictMode $ ThreadPolicy) (SoLoader.java:522)
com.facebook.soloader.SoLoader.void loadLibraryBySoName (java.lang.String, java.lang.String, java.lang.String, int, android.os.StrictMode $ ThreadPolicy) (SoLoader.java:420)
com.facebook.soloader.SoLoader.void loadLibrary (java.lang.String, int) (SoLoader.java:370)
com.facebook.soloader.SoLoader.void loadLibrary (java.lang.String) (SoLoader.java:335)
com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.void load () (ImagePipelineNativeLoader.java:42)
com.facebook.imagepipeline.memory.NativeMemoryChunk.void() (NativeMemoryChunk.java:33)
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.com.facebook.imagepipeline.memory.NativeMemoryChunk alloc (int) (NativeMemoryChunkPool.java:58)
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.void gratis (java.lang.Object) (NativeMemoryChunkPool.java:20)

_padre _ ## 1 ## _ padre_

_child _ ## java.lang.Object alloc (int) ## _ child_

com.facebook.imagepipeline.memory.BasePool.java.lang.Object get (int) (BasePool.java:257)
com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.void(com.facebook.imagepipeline.memory.NativeMemoryChunkPool, int) (NativePooledByteBufferOutputStream.java:51)
com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.com.facebook.imagepipeline.memory.NativePooledByteBuffer newByteBuffer (java.io.InputStream, int) (NativePooledByteBufferFactory.java:98)
com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.com.facebook.common.memory.PooledByteBufferOutputStream newOutputStream (int) (NativePooledByteBufferFactory.java:26)

_padre _ ## 4 ## _ padre_

_child _ ## com.facebook.common.memory.PooledByteBufferOutputStream newOutputStream () ## _ niño_

_child _ ## com.facebook.common.memory.PooledByteBuffer newByteBuffer (java.io.InputStream, int) ## _ child_

_child _ ## com.facebook.common.memory.PooledByteBuffer newByteBuffer (byte []) ## _ child_

_child _ ## com.facebook.common.memory.PooledByteBuffer newByteBuffer (java.io.InputStream) ## _ child_

com.facebook.imagepipeline.producers.LocalFetchProducer.com.facebook.imagepipeline.image.EncodedImage getByteBufferBackedEncodedImage (java.io.InputStream, int) (LocalFetchProducer.java:89)

_padre _ ## 2 ## _ parent_

_child _ ## com.facebook.imagepipeline.image.EncodedImage getEncodedImage (com.facebook.imagepipeline.request.ImageRequest) ## _ niño_

_child _ ## java.lang.String getProducerName () ## _ niño_

com.facebook.imagepipeline.producers.LocalFetchProducer.com.facebook.imagepipeline.image.EncodedImage getEncodedImage (java.io.InputStream, int) (LocalFetchProducer.java:101)
com.facebook.imagepipeline.producers.LocalFileFetchProducer.com.facebook.imagepipeline.image.EncodedImage getEncodedImage (com.facebook.imagepipeline.request.ImageRequest) (LocalFileFetchProducer.java:34)
com.facebook.imagepipeline.producers.LocalFetchProducer $ 1.com.facebook.imagepipeline.image.EncodedImage getResult () (LocalFetchProducer.java:54)
com.facebook.imagepipeline.producers.LocalFetchProducer $ 1.java.lang.Object getResult () (LocalFetchProducer.java:50)
com.facebook.common.executors.StatefulRunnable.void run () (StatefulRunnable.java:45)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112)
java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:587)
com.facebook.imagepipeline.core.PriorityThreadFactory $ 1.void run () (PriorityThreadFactory.java:53)
java.lang.Thread.run (Thread.java:818)

duplicate

Comentario más útil

al diablo con la reacción

Todos 9 comentarios

Sí, esto parece ser un duplicado de # 2049 (especialmente https://github.com/facebook/fresco/issues/2049#issuecomment-367235216). @ jyh149129 , estoy cerrando el tema aquí para enfocar la discusión allí :)

¡Gracias @gengjiawen!

al diablo con la reacción

¿Dónde está la solución? Estoy enfrentando un problema en la versión 1.13.0 de la dependencia de Fresco. Por favor, ayúdame.

Creo que encontré por qué sucedió este error, porque el cpu_abi de / data / data / yourpackage / lib y / data / data / yourpackage / lib-main es diferente.
¿Y por qué es diferente? porque ExtractFromZipSoSource.ensureDsos () tenía un defecto.
¿Qué defecto? Se suponía que el sistema operativo Android pensaba que era una aplicación de 64 bits cuando tenía bibliotecas de 32 y 64 bits. Pero, la regla se rompió en el OPPO R7sm (Android 5.1.1 ColorOS: V3.0_170510_beta).

He solucionado el error en mi OPPO modificando el código, haré una solicitud de extracción más tarde, esperando ayudar a sus muchachos.

¡Genial, gracias por investigar a @artemisia!

@artemisia Deseo ver tus relaciones públicas! Este error me confunde mucho ...

Perdón mi ingles es malo.

Dispositivo: Dispositivo móvil: OPPC R7sm (AndroLinkid 5.1.1)
Recomendaciones:
Cuando existe armeabi-v7a nad arm64-v8a en apk, generalmente se carga arm64-v8a. Pero OPPO R7sm se carga armeabi-v7a.

Verifico datos de ruta / aplicación // lib /. Find es arm, no arm64. Generalmente debería ser arm64

Cuando inicie soloader, descomprimirá datos / aplicación // .apk. / lib-main.Este flujo verificará el soporte del dispositivo abi (ZipUnpacker.ensureDsos () en ExtractFromZipSoSource.java),y comprobar datos / aplicación // lib / arm / .so y * /. so del archivo apk (ApkUnpacker.shouldExtract () en ApkSoSource.java).
Los archivos no son los mismos. copiará a datos / datos // lib-main.

El get supportedAbis es ["arm64-v8a", "armeabi-v7a", "armeabi"]. Confirme el archivo * .so secuencialmente.
Pero data / app // lib / está armado en OPPC R7sm, así que siempre copie arm64-v8a el archivo del sistema operativo a data / data // lib-main.

Llevar a * .so es un problema de 64 bits en lugar de 32 bits.

Mi solución:

Modifique la biblioteca de SoLoader. Agregar datos de verificación / aplicación // lib / es arm o arm64.

Expediente:
ExtractFromZipSoSource.java

    ...
    final ZipDso[] ensureDsos() {
      if (mDsos == null) {
        Set<String> librariesAbiSet = new LinkedHashSet<>();
        HashMap<String, ZipDso> providedLibraries = new HashMap<>();
        Pattern zipSearchPattern = Pattern.compile(mZipSearchPattern);
        String[] supportedAbis = SysUtil.getSupportedAbis();
        Enumeration<? extends ZipEntry> entries = mZipFile.entries();

+        // Fixed couldn't find DSO to load:  "xxx.os"  is 64-bit instead of 32-bit
+       File sysLibPath =  new File(mContext.getApplicationInfo().nativeLibraryDir);
+       String sysLibAbi = sysLibPath.getPath().substring(sysLibPath.getPath().lastIndexOf("/")+1);
+       if(sysLibAbi.equalsIgnoreCase("arm")) {
+         // sys lib is load armeabi-v7a, this exception case
+         ArrayList<String> newSupportedAbis = new ArrayList();
+         for(String abi : supportedAbis) {
+           if(abi.equalsIgnoreCase("arm64-v8a")) {
+               //skip arm64-v8a
+               continue;
+           }
+
+           newSupportedAbis.add(abi);
+         }
+
+         supportedAbis = newSupportedAbis.toArray(new String[newSupportedAbis.size()]);
+       }


        while (entries.hasMoreElements()) {
          ZipEntry entry = entries.nextElement();
          Matcher m = zipSearchPattern.matcher(entry.getName());
    ...

al diablo con la reacción

Bienvenido Flutter

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

sungerk picture sungerk  ·  3Comentarios

satyarths picture satyarths  ·  3Comentarios

qiiyue picture qiiyue  ·  4Comentarios

goodev picture goodev  ·  4Comentarios

amodkanthe picture amodkanthe  ·  3Comentarios