Fresco: Saat membangun melalui App Bundle, Fresco gagal menemukan "libimagepipeline.so"

Dibuat pada 7 Des 2018  ·  21Komentar  ·  Sumber: facebook/fresco

Keterangan

Saat meluncurkan Aktivitas yang menggunakan Fresco, yang telah dibuat melalui Android App Bundle , ia gagal menemukan "libimagepipeline.so" dan membuat aplikasi mogok.

Reproduksi

  1. Buat contoh aplikasi yang menggunakan Fresco
  2. Hasilkan Bundel yang ditandatangani
  3. Menggunakan Bundle Tool, buat APK dari Bundle
  4. Menggunakan Bundle Tool, instal APK ke perangkat Anda
  5. Arahkan ke Aktivitas di mana Fresco diinisialisasi
  6. Amati kecelakaan

Larutan

Saya awalnya mengira ini mungkin masalah dengan minify, R8, atau Proguard, tetapi saya menonaktifkan semuanya, dan masih mengamati hasil yang sama saat membangun melalui App Bundle.

Saya telah menguji komponen lain dari aplikasi saya yang juga menggunakan pustaka asli, tetapi semuanya beroperasi seperti yang diharapkan, hanya dengan Fresco yang berjuang untuk memuat biner masing-masing.

Solusi sementara, tetapi tidak ideal yang saya temukan adalah menonaktifkan pemisahan APK dengan abi menggunakan konfigurasi berikut, tetapi menyertakan semua binari menghasilkan ukuran APK yang jauh lebih besar.

android {
    // Rest of your configuration here

    bundle {
        abi {
            enableSplit false
        }
    }
}

informasi tambahan

  • Versi lukisan dinding: 1.10.0
  • Versi platform: Samsung SM-G955F, Android 8.0.0
bug help wanted

Komentar yang paling membantu

Saya telah menemukan masalah di SoLoader lib yang digunakan oleh Fresco. Saya sudah menyiapkan PR dengan perbaikan: facebook/soloader#26
Perbaikan itu membuat lukisan dinding berfungsi dengan baik dengan bundel aplikasi.
Saya telah menerbitkan versi SoLoader lib yang ditambal. Anda dapat menggunakannya dalam proyek Anda jika Anda tidak bisa menunggu sampai PR digabungkan.

repositories {
    maven {
        url  "https://dl.bintray.com/nnesterov/maven" 
    }
}

compile('com.facebook.fresco:fresco:1.10.0') {
    exclude group: 'com.facebook.soloader', module: 'soloader'
}
compile("com.avito.android:patched-soloader:0.1.0")

Semua 21 komentar

Apakah pesan kesalahan Anda terlihat seperti ini? #2049

Ya, kira-kira. Namun masalah ini sementara terkait saya pikir lebih fokus pada
kurangnya dukungan untuk Android App Bundle di Fresco atau SoLoader dan
membelah binari seperti itu.

Saya bisa saja salah, tetapi masalah ini dapat direproduksi di setiap perangkat yang saya miliki
diuji, tidak hanya memilih merek.

Dan sesuai panduan pengiriman Fresco, tidak ada catatan tentang kasus penggunaan
pengiriman melalui Android App Bundle, dan kami tidak dapat menggunakan kunci splits seperti saat
anda menggunakan bundle splits diabaikan.

Pada Selasa, 11 Des 2018, 06:40 KimiChiu, [email protected] menulis:

Apakah pesan kesalahan Anda terlihat seperti ini? #2049
https://github.com/facebook/fresco/issues/2049


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung, lihat di GitHub
https://github.com/facebook/fresco/issues/2253#issuecomment-446089907 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABUQnQ4cZ-sWkG5b72Ea81wiQjS02yjlks5u31NxgaJpZM4ZIsuf
.

Hai @icerfish ,

Terima kasih telah mengajukan masalah ini dengan semua detail yang diperlukan (mungkin tambahkan tempel kesalahan jika Anda punya waktu). Saya dapat membayangkan bahwa Fresco mungkin tidak sepenuhnya mendukung bundel aplikasi dan saya tidak berpikir bahwa kami pernah menguji interaksi tersebut.

Saya akan menandai ini sebagai "bug" dan "dicari bantuan" dengan harapan bahwa ini adalah sesuatu yang komunitas sumber terbuka dapat membantu kami.

Hai @lambdapioneer ,

Berikut adalah stacktracenya:

FATAL EXCEPTION: FrescoIoBoundExecutor-8 Process: com.gobuzzvault.android, PID: 17499 java.lang.NoClassDefFoundError: com.facebook.imagepipeline.memory.NativeMemoryChunk at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:25) at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:13) at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:267) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferOutputStream.<init>(MemoryPooledByteBufferOutputStream.java:51) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:73) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:24) at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:87) at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:99) at com.facebook.imagepipeline.producers.LocalContentUriFetchProducer.getCameraImage(LocalContentUriFetchProducer.java:100) at com.facebook.imagepipeline.producers.LocalContentUriFetchProducer.getEncodedImage(LocalContentUriFetchProducer.java:76) at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:52) at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:48) at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:43) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:51) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libimagepipeline.so at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:703) at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:564) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:500) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:455) at com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:40) at com.facebook.imagepipeline.memory.NativeMemoryChunk.<clinit>(NativeMemoryChunk.java:31) at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:25) at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:13) at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:267) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferOutputStream.<init>(MemoryPooledByteBufferOutputStream.java:51) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:73) at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:24) at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:87) at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:99) at com.facebook.imagepipeline.producers.LocalContentUriThumbnailFetchProducer.getThumbnail(LocalContentUriThumbnailFetchProducer.java:135) at com.facebook.imagepipeline.producers.LocalContentUriThumbnailFetchProducer.getCameraImage(LocalContentUriThumbnailFetchProducer.java:100) at com.facebook.imagepipeline.producers.LocalContentUriThumbnailFetchProducer.getEncodedImage(LocalContentUriThumbnailFetchProducer.java:75) at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:52)  at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:48)  at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:43)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)  at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:51)  at java.lang.Thread.run(Thread.java:764)

Tampaknya mirip dengan masalah yang dialami orang lain.

Dari melihat-lihat basis kode, sepertinya ini bukan masalah dengan Fresco itu sendiri, tetapi lebih pada perpustakaan SoLoader. Saya akan memposting silang masalah ke repositori itu, dan beban kerja memungkinkan untuk mendedikasikan beberapa waktu untuk mencoba mencari tahu apa masalahnya sebenarnya.

Hai, saya memiliki masalah yang sama saat menggunakan bundel aplikasi, seperti yang dijelaskan di https://github.com/facebook/fresco/issues/2049#issuecomment -441088387

Menggunakan Fresco 1.11 dan menyetel .experiment().setNativeCodeDisabled(true) di Fresco's ImagePipelineConfig membuat gambar statis berfungsi untuk saya tetapi GIF mogok dengan stacktrace yang berbeda, yang tampak seperti masalah SoLoader yang sama dengan perpustakaan yang berbeda. @icerfish , ini dapat membantu Anda jika Anda tidak menggunakan GIF.

Saya telah menemukan masalah di SoLoader lib yang digunakan oleh Fresco. Saya sudah menyiapkan PR dengan perbaikan: facebook/soloader#26
Perbaikan itu membuat lukisan dinding berfungsi dengan baik dengan bundel aplikasi.
Saya telah menerbitkan versi SoLoader lib yang ditambal. Anda dapat menggunakannya dalam proyek Anda jika Anda tidak bisa menunggu sampai PR digabungkan.

repositories {
    maven {
        url  "https://dl.bintray.com/nnesterov/maven" 
    }
}

compile('com.facebook.fresco:fresco:1.10.0') {
    exclude group: 'com.facebook.soloader', module: 'soloader'
}
compile("com.avito.android:patched-soloader:0.1.0")

Versi patched-soloader sebelumnya tidak berfungsi pada perangkat pra-lolipop. Saya sudah memperbaikinya. Menggunakan
compile("com.avito.android:patched-soloader:0.1.1")

@nesterov-n terima kasih atas perbaikan yang bagus, ada kemajuan untuk mengintegrasikannya ke dalam lukisan dinding?

@nesterov-n saya juga menghadapi masalah yang sama. tolong beri tahu saya kapan itu akan diintegrasikan ke dalam lukisan dinding?

Hai @theromis dan @sailesh2
Saya tidak bekerja di Facebook (sangat menyedihkan). Saya hanya pengguna Fresco tetapi saya tidak sabar menunggu perbaikan. Jadi saya harus men-debug dan memperbaikinya.
Saat ini, saya menggunakan versi soloder lib yang ditambal untuk proyek saya seperti yang saya jelaskan dalam komentar di atas. Versi terbaru adalah com.avito.android:patched-soloader:0.1.2

PR saya ke lib soloader sedang ditinjau sekarang tetapi pengelola soloader memberi tahu bahwa tidak ada perkiraan rilis lib soloader baru. Jadi tidak mungkin untuk memperkirakan kapan Fresco akan menggunakan versi baru ini.

Jika mendesak, Anda dapat menggunakan versi tambalan saya. Kami menerbitkan bundel dengan lukisan dinding ke produksi. Bekerja dengan baik.

Tidak tahu mengapa solusi ini belum terintegrasi ke dalam Fresco.

Kami telah mendapatkan perbaikan SoLoader. Kami akan segera merilis versi Fresco baru setelah versi SoLoader dirilis.

@oprisnik apa ETA untuk rilisnya? Saya mengerti bahwa itu memerlukan koordinasi 2 tim tetapi setidaknya beberapa angka kasar akan membantu banyak pengembang memutuskan apakah mereka harus menerapkan solusi di atas atau menunggu rilis.

SoLoader v0.6.0 baru saja dirilis dan saya telah memperbarui ketergantungan Fresco (6fc071d1892166d11d1f237f10e2d9bcdf858087). Kami ingin menunggu rilis Baut berlisensi MIT (#2257). Jika rilis itu membutuhkan waktu lebih lama dari yang diharapkan, kami akan melewatkannya untuk saat ini dan merilisnya tanpa itu. Bagaimanapun, versi baru akan keluar dalam beberapa hari.

Saya tidak ingin menjadi membosankan, tetapi bukankah lukisan harus dilepaskan? Tampaknya masalah yang Anda tunjukkan ini belum menerima aktivitas apa pun untuk sementara waktu.

Kami baru saja merilis versi 1.12.0 yang menyertakan versi SoLoader tetap.

coba tambahkan proguard

Jangan hapus metode/kelas apa pun yang dianotasi dengan @DoNotStrip

-pertahankan kelas @com.facebook.common.internal.DoNotStrip *
-keepclassmembers class * {
@com.facebook.common.internal.DoNotStrip *;
}

Jangan hapus metode/kelas apa pun yang dianotasi dengan @DoNotOptimize

-pertahankan kelas @com.facebook.soloader.DoNotOptimize *
-keepclassmembers class * {
@com.facebook.soloader.DoNotOptimize *;
}

Pertahankan metode asli

-keepclassmembers class * {
warga asli;
}

-jangan peringatkan okio. *-jangan peringatkan com.squareup.okhttp. *
-jangan peringatkan okhttp3. *-jangan peringatkan javax.annotation. *
-jangan peringatkan com.android.volley.toolbox. *-jangan peringatkan com.facebook.infer. *

@ProHzen Apakah ini memperbaiki crash soloader?

Ya, saya memecahkannya.

itu masih dalam fresco 2.0.0, :-( , tolong sarankan solusi saya hanya punya masalah dengan perangkat nexus

@ProHzen Halo, bisakah Anda mengirimkan saya daftar kebingungan Anda? Saya sudah mencobanya seperti yang Anda lakukan, tetapi tidak berhasil.
Informasi:
lukisan dinding: 1.13.0
classpath 'com.android.tools. membangun: tingkat : 3.5.1'

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

bigfreeZhou picture bigfreeZhou  ·  4Komentar

goodev picture goodev  ·  4Komentar

sungerk picture sungerk  ·  3Komentar

rafaelekol picture rafaelekol  ·  4Komentar

satyarths picture satyarths  ·  3Komentar