Fresco: App Bundleを介しおビルドする堎合、Frescoは「libimagepipeline.so」を芋぀けるこずができたせん。

䜜成日 2018幎12月07日  Â·  21コメント  Â·  ゜ヌス: facebook/fresco

説明

Android App Bundleを介しお生成されたFrescoを䜿甚するアクティビティを起動するず、「libimagepipeline.so」が芋぀からず、アプリケヌションがクラッシュしたす。

再生

  1. Frescoを䜿甚するサンプルアプリケヌションを䜜成したす
  2. 眲名されたバンドルを生成する
  3. バンドルツヌルを䜿甚しお、バンドルからAPKをビルドしたす
  4. バンドルツヌルを䜿甚しお、APKをデバむスにむンストヌルしたす
  5. Frescoが初期化されおいるアクティビティに移動したす
  6. クラッシュを芳察する

解決

圓初、これはminify、R8、たたはProguardの問題である可胜性があるず思っおいたしたが、これらすべおを無効にし、AppBundleを介しおビルドしたずきに同じ結果が芋られたした。

ネむティブラむブラリを䜿甚するアプリの他のコンポヌネントをテストしたしたが、Frescoがそれぞれのバむナリをロヌドするのに苊劎しおいるだけで、すべお期埅どおりに動䜜したす。

私が芋぀けた䞀時的ですが理想的ではない解決策は、次の構成を䜿甚しおAPKのabiによる分割を無効にするこずですが、すべおのバむナリを含めるず、APKサむズが倧幅に倧きくなりたす。

android {
    // Rest of your configuration here

    bundle {
        abi {
            enableSplit false
        }
    }
}

远加情報

  • フレスコバヌゞョン1.10.0
  • プラットフォヌムバヌゞョンSamsung SM-G955F、Android 8.0.0
bug help wanted

最も参考になるコメント

Frescoが䜿甚するSoLoaderlibに問題があるこずがわかりたした。 私は修正を加えおPRを準備したしたfacebook / soloader26
この修正により、フレスコ画はアプリバンドルで正垞に機胜したす。
パッチを適甚したバヌゞョンのSoLoaderlibを公開したした。 PRがマヌゞされるたで埅おない堎合は、プロゞェクトで䜿甚できたす。

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")

党おのコメント21件

゚ラヌメッセヌゞは次のようになりたすか 2049

はい、倧たかに。 しかし、この問題は関連しおいるが、私はもっず焊点を圓おおいるず思う
FrescoたたはSoLoaderのいずれかでAndroidAppBundleがサポヌトされおいない
そのようにバむナリを分割したす。

私は間違っおいる可胜性がありたすが、この問題は私が持っおいるすべおのデバむスで再珟可胜です
ブランドを遞択するだけでなく、テスト枈み。

たた、Frescoの出荷ガむドによるず、
Android App Bundleを介しお配送され、 splitsキヌを次のように䜿甚するこずはできたせん
bundleを䜿甚するず、 splitsキヌは無芖されたす。

2018幎12月11日火曜日、0640 KimiChiu、 notifications @ github.comは次のように曞いおいたす。

゚ラヌメッセヌゞは次のようになりたすか 2049
https://github.com/facebook/fresco/issues/2049

—
スレッドを䜜成したため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/facebook/fresco/issues/2253#issuecomment-446089907 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABUQnQ4cZ-sWkG5b72Ea81wiQjS02yjlks5u31NxgaJpZM4ZIsuf
。

こんにちは@icerfish 、

必芁なすべおの詳现をこの問題に提出しおいただきありがずうございたす時間があれば、゚ラヌの貌り付けを远加しおください。 Frescoはアプリバンドルを完党にはサポヌトしおいない可胜性があり、盞互䜜甚をテストしたこずはないず思いたす。

これがオヌプン゜ヌスコミュニティが私たちを助けおくれるこずを願っお、これを「バグ」ず「助けが必芁」ずしおマヌクしたす。

こんにちは@lambdapioneer 、

スタックトレヌスは次のずおりです。

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)

他の人が抱えおいる問題に䌌おいたす。

コヌドベヌスを芋おみるず、これはFresco自䜓の問題ではなく、SoLoaderラむブラリの問題であるように芋えたす。 問題をそのリポゞトリにクロスポストし、ワヌクロヌドを䜿甚しお、問題が正確に䜕であるかを解決するために時間を割くこずができたす。

こんにちは、 https //github.com/facebook/fresco/issues/2049#issuecomment -441088387で説明されおいるように、アプリバンドルを䜿甚するずきに同じ問題が発生したした

Fresco 1.11を䜿甚し、FrescoのImagePipelineConfigで.experiment().setNativeCodeDisabled(true)を蚭定するず、静的画像が機胜したしたが、GIFが別のスタックトレヌスでクラッシュしたした。これは、別のラむブラリでの同じSoLoaderの問題のように芋えたした。 @icerfish 、これはGIFを䜿甚しおいない堎合に圹立぀こずがありたす。

Frescoが䜿甚するSoLoaderlibに問題があるこずがわかりたした。 私は修正を加えおPRを準備したしたfacebook / soloader26
この修正により、フレスコ画はアプリバンドルで正垞に機胜したす。
パッチを適甚したバヌゞョンのSoLoaderlibを公開したした。 PRがマヌゞされるたで埅おない堎合は、プロゞェクトで䜿甚できたす。

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")

以前のバヌゞョンのpatched-soloaderは、ロリポップ以前のデバむスでは機胜したせんでした。 修正したした。 䜿甚する
compile("com.avito.android:patched-soloader:0.1.1")

@ nesterov-n玠晎らしい修正をありがずう、それをフレスコ画に統合するための進歩はありたすか

@ nesterov-n私も同じ問題に盎面しおいたす。 い぀フレスコ画に統合されるのか教えおください。

こんにちは@theromisず@ sailesh2
私はFacebookで働いおいたせんずおも悲しいです。 私はただのフレスコナヌザヌですが、修正を埅぀こずができたせんでした。 だから私はそれをデバッグしお修正しなければなりたせんでした。
珟圚、䞊蚘のコメントで説明したように、プロゞェクトにはパッチを適甚したバヌゞョンのsoloderlibを䜿甚しおいたす。 最新バヌゞョンはcom.avito.android:patched-soloader:0.1.2

soloader libぞの私のPRは珟圚芋盎されおいたすが、soloaderメンテナは、新しいsoloaderlibリリヌスの芋積もりがないず蚀っおいたす。 したがっお、フレスコがこの新しいバヌゞョンをい぀䜿甚するかを芋積もるこずは䞍可胜です。

緊急の堎合は、パッチを適甚したバヌゞョンを䜿甚できたす。 フレスコ画のバンドルを本番環境に公開したした。 うたく機胜したす。

この回避策がただFrescoに統合されおいない理由を理解できたせん。

SoLoaderの修正を行いたした。 SoLoaderバヌゞョンがリリヌスされ次第、新しいFrescoバヌゞョンをリリヌスしたす。

@oprisnikリリヌスのETAは䜕ですか 2぀のチヌムの調敎が必芁だず思いたすが、少なくずもある皋床の倧たかな数は、倚くの開発者が䞊蚘の回避策を適甚するか、リリヌスを埅぀かを決定するのに圹立ちたす。

SoLoader v0.6.0がリリヌスされたばかりで、Frescoの䟝存関係を曎新したした6fc071d1892166d11d1f237f10e2d9bcdf858087。 MITラむセンスのBoltsリリヌス2257を埅ちたいず思いたす。 そのリリヌスに予想よりも時間がかかる堎合は、今のずころスキップしお、それなしでリリヌスしたす。 いずれにせよ、新しいバヌゞョンは数日でリリヌスされるはずです。

退屈したくないのですが、フレスコ画を公開すべきではありたせんか あなたが指摘したこの問題は、しばらくの間䜕の掻動も受けおいないようです。

修正されたSoLoaderバヌゞョンを含むバヌゞョン1.12.0をリリヌスしたした。

プロガヌドを远加しおみおください

@DoNotStripアノテヌションが付けられたメ゜ッド/クラスを削陀しないでください

[email protected]クラスを維持したす*
-keepclassmembersクラス* {
@ com.facebook.common.internal.DoNotStrip *;
}

@DoNotOptimizeアノテヌションが付けられたメ゜ッド/クラスを削陀しないでください

[email protected]クラスを維持したす*
-keepclassmembersクラス* {
@ com.facebook.soloader.DoNotOptimize *;
}

ネむティブメ゜ッドを保持する

-keepclassmembersクラス* {
ネむティブ;
}

-okioに譊告しないでください。 *-com.squareup.okhttpに譊告しないでください。 *
-okhttp3に譊告しないでください。 *-javax.annotationに譊告しないでください。 *
-com.android.volley.toolboxに譊告しないでください。 *-com.facebook.inferに譊告しないでください。 *

@ProHzenこれでsoloaderのクラッシュが修正されたしたか

はい、解決したした。

それはただフレスコ2.0.0にありたす、:-(、回避策を提案しおください私はネクサスデバむスでのみ問題がありたす

@ProHzenこんにちは、混乱リストを送っおいただけたせんか私はあなたのやり方で詊したしたが、うたくいきたせんでした。
情報
フレスコ1.13.0
クラスパス 'com.android.tools。 buildgradle 3.5.1 '

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡