Fresco: تعذر على java.lang.UnsatisfiedLinkError العثور على DSO للتحميل: libimagepipeline.so

تم إنشاؤها على ٢٣ مارس ٢٠١٨  ·  9تعليقات  ·  مصدر: facebook/fresco

معلومات:

  • إصدار فريسكو
  • إصدار النظام الأساسي: Vivo Android 5.1.1 ، وحدة المعالجة المركزية: arm64-v8a

تعذر العثور على DSO للتحميل: 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) فشل: فشل dlopen: "/ data / data / xxx / lib-main /libimagepipeline.so "هو 64 بت بدلاً من 32 بت
03-23 ​​19: 21: 55.955 17814 17931 E SoLoader: تعذر تحميل: libimagepipeline.so

التفاصيل

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 تخصيص (int) (NativeMemoryChunkPool.java:58)
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.void free (java.lang.Object) (NativeMemoryChunkPool.java:20)

_ الوالد _ ## 1 ## _ الوالد_

_child _ ## java.lang.Object تخصيص (int) ## _ child_

com.facebook.imagepipeline.memory.BasePool.java.lang.Object الحصول على (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)

_الوالد _ ## 4 ## _ الوالد_

_child _ ## com.facebook.common.memory.PooledByteBufferOutputStream newOutputStream () ## _ child_

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

_child _ ## com.facebook.common.memory.PooledByteBuffer newByteBuffer (بايت []) ## _ 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)

_الوالد _ ## 2 ## _ الوالد_

_child _ ## com.facebook.imagepipeline.image.EncodedImage getEncodedImage (com.facebook.imagepipeline.request.ImageRequest) ## _ child_

_child _ ## java.lang.String getProducerName () ## _ child_

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

التعليق الأكثر فائدة

اللعنة على رد الفعل

ال 9 كومينتر

نسخة طبق الأصل من https://github.com/facebook/fresco/issues/2049.

نعم ، يبدو أن هذه نسخة مكررة من # 2049 (خاصة https://github.com/facebook/fresco/issues/2049#issuecomment-367235216). @ jyh149129 ، أغلق المشكلة هنا لتركيز المناقشة هناك :)

gengjiawen شكرا!

اللعنة على رد الفعل

اين الحل؟ أواجه مشكلة في إصدار 1.13.0 من تبعية Fresco. أرجوك أن تساعدني.

أعتقد أنني وجدت سبب حدوث هذا الخطأ ، لأن cpu_abi لـ / data / data / yourpackage / lib و / data / data / yourpackage / lib-main مختلفة.
ولماذا هو مختلف؟ لأن ExtractFromZipSoSource.ensureDsos () به عيب.
ما العيب؟ كان هناك افتراض بأن نظام التشغيل Android يعتقد أنك كنت تطبيق 64 بت عندما كان لديك مكتبات 32 بت و 64 بت. ولكن ، تم كسر القاعدة في OPPO R7sm (Android 5.1.1 ColorOS: V3.0_170510_beta).

لقد أصلحت الخلل في OPPO الخاص بي عن طريق تعديل الكود ، وسأقدم طلب سحب لاحقًا ، متوقعًا أن أساعد رفاقك.

رائع ، شكرًا لاستقصاءartemisia!

artemisia أتمنى رؤية العلاقات العامة الخاصة بك! هذا الخطأ

آسف لغتي الإنجليزية سيئة.

الجهاز: Mobile Device: OPPC R7sm (AndroLinkid 5.1.1)
الموجودات:
عندما يوجد armeabi-v7a nad arm64-v8a في apk ، يتم تحميل arm64-v8a بشكل عام. لكن OPPO R7sm محملة armeabi-v7a.

أتحقق من بيانات المسار / التطبيق // ليب /. البحث هو ذراع ، وليس arm64. عموما يجب أن يكون arm64

عند بدء soloader ، سيتم فك ضغط البيانات / التطبيق // .apk. / lib-main.سيتحقق هذا التدفق من دعم الجهاز abi (ZipUnpacker.ensureDsos () على ExtractFromZipSoSource.java) ،وتحقق من البيانات / التطبيق // lib / arm / .so و * /. لذا من ملف apk (ApkUnpacker.shouldExtract () على ApkSoSource.java).
الملفات ليست هي نفسها. سوف ينسخ إلى البيانات / البيانات // lib-main.

الحصول على supportAbis هو ["arm64-v8a" ، "armeabi-v7a" ، "armeabi"]. قم بتأكيد ملف * .so بالتسلسل.
لكن data / app // lib / is arm على OPPC R7sm ، لذلك قم دائمًا بنسخ ملف arm64-v8a إلى بيانات / بيانات // lib-main.

تؤدي إلى *. لذا فهي مشكلة 64 بت بدلاً من 32 بت.

بلدي الحل:

تعديل مكتبة SoLoader. إضافة بيانات الشيك / التطبيق // lib / هو arm أو arm64.

ملف:
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());
    ...

اللعنة على رد الفعل

مرحبًا Flutter

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات