n'a pas pu trouver DSO à charger : 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) a échoué : dlopen a échoué : "/data/data/xxx/lib-main /libimagepipeline.so" est en 64 bits au lieu de 32 bits
03-23 19:21:55.955 17814 17931 E SoLoader : Impossible de charger : 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 gratuit(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)
Peut-être duplicata de https://github.com/facebook/fresco/issues/2049.
Oui, cela semble être un doublon de #2049 (en particulier https://github.com/facebook/fresco/issues/2049#issuecomment-367235216). @jyh149129 , je ferme le problème ici pour concentrer la discussion là-bas :)
Merci @gengjiawen !
putain la réaction
Où est la solution ? Je suis confronté à un problème dans la version 1.13.0 de la dépendance Fresco. Sil te plait aide moi.
Je pense avoir trouvé pourquoi ce bogue s'est produit, car le cpu_abi de /data/data/yourpackage/lib et /data/data/yourpackage/lib-main est différent.
Et pourquoi est-ce différent ? parce que ExtractFromZipSoSource.ensureDsos() avait un défaut.
Quel défaut ? On supposait que le système d'exploitation Android pensait que vous étiez une application 64 bits alors que vous disposiez à la fois de bibliothèques 32 bits et 64 bits. Mais, la règle a été enfreinte sur l'OPPO R7sm (Android 5.1.1 ColorOS : V3.0_170510_beta).
J'ai corrigé le bug sur mon OPPO en modifiant le code, je ferai une pull request plus tard, en espérant aider vos gars.
Génial, merci d'avoir enquêté sur @artemisia !
@artemisia Souhaite voir votre PR!Ce bug me confond beaucoup...
Désolé mon anglais est mauvais.
Appareil : Appareil mobile : OPPC R7sm (AndroLinkid 5.1.1)
Résultats:
Quand existe armeabi-v7a nad arm64-v8a dans apk, généralement chargé arm64-v8a. Mais OPPO R7sm est chargé armeabi-v7a.
Je vérifie les données de chemin/app/
Lors de l'initialisation du chargeur, décompressera data/app/
Les fichiers ne sont pas les mêmes. copiera dans data/data/
L'Abis pris en charge est ["arm64-v8a", "armeabi-v7a", "armeabi"]. Confirmez le fichier *.so dans l'ordre.
Mais data/app//lib/ est arm sur OPPC R7sm, donc copiez toujours arm64-v8a le fichier os dans data/data/
Lead to *.so est un problème de 64 bits au lieu de 32 bits.
Ma solution:
Modifier la bibliothèque SoLoader. Ajouter des données de vérification/application/
Déposer:
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());
...
putain la réaction
Flottement de bienvenue
Commentaire le plus utile
putain la réaction