не удалось найти 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) failed: dlopen failed: "/ 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
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.com.facebook.imagepipeline.memory.NativeMemoryChunk alloc (int) (NativeMemoryChunkPool.java:58)
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.void free (java.lang.Object) (NativeMemoryChunkPool.java:20)
com.facebook.imagepipeline.memory.BasePool.java.lang.Object get (int) (BasePool.java:257)
com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.void
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)
com.facebook.imagepipeline.producers.LocalFetchProducer.com.facebook.imagepipeline.image.EncodedImage getByteBufferBackedEncodedImage (java.io.InputStream, int) (LocalFetchProducer.java:89)
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)
Возможно дубликат 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-битные библиотеки so. Но на OPPO R7sm правило было нарушено (Android 5.1.1 ColorOS: V3.0_170510_beta).
Я исправил ошибку на своем OPPO, изменив код, я сделаю запрос на перенос позже, надеясь помочь вашим ребятам.
Отлично, спасибо за исследование @artemisia!
@artemisia Желаю видеть ваш пиар! Этот баг меня очень смущает ...
Извини я плохо знаю английский.
Устройство: Мобильное устройство: OPPC R7sm (AndroLinkid 5.1.1)
Выводы:
Если в apk есть armeabi-v7a и arm64-v8a, обычно загружается arm64-v8a. Но в OPPO R7sm загружается armeabi-v7a.
Проверяю данные пути / приложение /
При инициализации солоадер распакует data / app /
Файлы разные. скопирует в data / data /
Поддерживаемый Abis - это ["arm64-v8a", "armeabi-v7a", "armeabi"]. Последовательно подтвердите файл * .so.
Но data / app // lib / - это arm на OPPC R7sm, поэтому всегда копируйте arm64-v8a файл os в data / data /
Привести к * .so - это 64-битная, а не 32-битная проблема.
Мое решение :
Измените библиотеку SoLoader. Добавить данные чека / приложение /
Файл:
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
Самый полезный комментарий
к черту реакцию