๋ฒ์ 1.8.0์ผ๋ก ์
๋ฐ์ดํธํ๋ฉด Crashlytic์์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libimagepipeline.so
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:522)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:420)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:370)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:335)
at com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:42)
at com.facebook.imagepipeline.memory.NativeMemoryChunk.<clinit>(NativeMemoryChunk.java:33)
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
at com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.<init>(NativePooledByteBufferOutputStream.java:51)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:89)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:101)
at com.facebook.imagepipeline.producers.LocalResourceFetchProducer.getEncodedImage(LocalResourceFetchProducer.java:39)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:54)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:50)
at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:45)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1115)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:590)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
at java.lang.Thread.run(Thread.java:818)
Fatal Exception: java.lang.UnsatisfiedLinkError: com.facebook.imagepipeline.memory.NativeMemoryChunk
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
at com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.<init>(NativePooledByteBufferOutputStream.java:51)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:89)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:101)
at com.facebook.imagepipeline.producers.LocalResourceFetchProducer.getEncodedImage(LocalResourceFetchProducer.java:39)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:54)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:50)
at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:45)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
at java.lang.Thread.run(Thread.java:818)
1.8.1๋ก ์
๋ฐ์ดํธํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋์ง ์๋๋ฉด build.gradle์ compile 'com.facebook.soloader:soloader:0.1.0+'
๋ฅผ ์ถ๊ฐํด์ผ ํ๋์ง ์๊ณ ์ถ์ต๋๋ค.
compile 'com.facebook.fresco:fresco:1.8.0'
compile 'com.facebook.fresco:animated-gif:1.8.10'
๋น๋ ์ค์ ์ด ์ด๋ป๊ฒ ๋๋์? ABI ๋ถํ ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น? http://frescolib.org/docs/shipping.html
@oprisnik
๋ด ๋น๋ ์ค์
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "com.mobix.pinecone"
minSdkVersion 15
targetSdkVersion 27
versionCode 83
versionName '5.42'
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
multiDexKeepProguard file("proguard.multidex.config")
}
debug {
minifyEnabled false
multiDexKeepProguard file("proguard.multidex.config")
}
}
productFlavors {
}
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
testOptions {
unitTests.returnDefaultValues = true
}
}
๋ฐ ๋ฉํฐ๋ฑ์ค ๊ตฌ์ฑ
-keepclassmembers class * implements android.os.Parcelable {
static ** CREATOR;
}
-dontwarn com.google.android.gms.**
-keep class com.google.android.gms.** { *; }
-keep class com.google.firebase.** { *; }
-keep class io.realm.** { *; }
-keep class io.branch.** { *; }
-keep class io.fabric.sdk.android.** { *; }
-keep class io.socket.** { *; }
-keep class com.google.android.youtube.** { *; }
-keep class com.crashlytics.android.** { *; }
-keep class com.facebook.internal.FacebookInitProvider.** { *; }
-keep class com.facebook.FacebookSdk.** { *; }
-keep class com.facebook.appevents.AppEventsLogger.** { *; }
-keep class com.facebook.common.memory.MemoryTrimmableRegistry.** { *; }
-keep class com.facebook.drawee.backends.pipeline.Fresco.** { *; }
-keep class com.facebook.imagepipeline.core.ImagePipelineConfig.** { *; }
-keep class me.zhanghai.android.materialprogressbar.** { *; }
-keep class com.nguyenhoanglam.imagepicker.** { *;}
-keep class com.iarcuschin.simpleratingbar.** { *;}
-keep class android.support.v4.app.NotificationManagerCompat.** { *;}
OPPO - OS: Android 5.1.1 ๋ฐ ๋ฒ์ 1.8.0์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ ์ ๋์ผํ ๋น๋ ๊ตฌ์ฑ์์๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@hsandyque๋ , ์ด์ 1.8.0๋ถํฐ Fresco์ ํจ๊ป ์ ๊ณต๋๋ฏ๋ก soloader
์ ๋ํ ์ถ๊ฐ ์ข
์์ฑ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ค๋ฅธ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ฏ๋ก 1.8.1๋ก ์
๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
build.gradle ํ์ผ์ @oprisnik์ด ๊ฒ์ํ ๋งํฌ์ ์ค๋ช
๋ ๋๋ก proguard-fresco.pro
ํ์ผ์ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
์ค๋ช
: ์ด ๋ฒ๊ทธ๋ _only_ ํน์ ์ฅ์น์์๋ง ๋ฐ์ํฉ๋๊น? ๊ณต์ ํ ์ ์๋ adb logcat
์ถ๋ ฅ์ด ์์ต๋๊น?
์๋ ํ์ธ์ @hsandyque , Oppo ์ ํ์์๋ง ๋ฐ์ํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ฐ์ด๋๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฒ๋ค๋ก ์ ๊ณต๋๊ณ ์ ํ๊ฐ ๋ก๋ํ๋ ๋ฐฉ์์ด ์ข์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ํ์ฌ OPPO ์ ํ์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ๊ฒ์ํ ๋ ๋ ๋์ ํฌ์ธํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค./
(a) ์ ์ฅ์์ ์๋ ์ผ์ผ์ด์ค ์ฑ์ ์ค์นํ ๋๋ ๋ฐ์ํฉ๋๊น? (๊ทธ๊ฒ์ ๋ด๊ฐ OPPO ์ ํ๋ฅผ ์ก๊ณ ๋๋ฉด ์ด๊ฒ์ ๋๋ฒ๊ทธํ๋ ๋ฐ ๋ ๊ฐ๊น์์ง ๊ฒ์
๋๋ค)
(b) ๋ฆด๋ฆฌ์ค APK์์ unzip -l your_release.apk | grep lib/
๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ๊ทธ๋ฌ๋ฉด ์ค์ ๋ก ๋ฒ๋ค๋ก ์ ๊ณต๋๋ ํ์ผ์ด ํ์๋ฉ๋๋ค.
์๋ ํ์ธ์ @lambdapioneer ์ ๋๋ค .
OPPO ์ ํ(Android 5.1.1)๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ Crashlytics์์ ๋ณด๊ณ ํฉ๋๋ค. ์ผ์ผ์ด์ค ์ฑ์์๋ ๋ฐ์ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒ๋ค ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
158176 00-00-1980 00:00 lib/arm64-v8a/libgifimage.so
383192 00-00-1980 00:00 lib/arm64-v8a/libimagepipeline.so
3107040 00-00-1980 00:00 lib/arm64-v8a/librealm-jni.so
91980 00-00-1980 00:00 lib/armeabi-v7a/libgifimage.so
255696 00-00-1980 00:00 lib/armeabi-v7a/libimagepipeline.so
1877536 00-00-1980 00:00 lib/armeabi-v7a/librealm-jni.so
100168 00-00-1980 00:00 lib/armeabi/libgifimage.so
313028 00-00-1980 00:00 lib/armeabi/libimagepipeline.so
4058380 00-00-1980 00:00 lib/mips/librealm-jni.so
145240 00-00-1980 00:00 lib/x86/libgifimage.so
452312 00-00-1980 00:00 lib/x86/libimagepipeline.so
3397252 00-00-1980 00:00 lib/x86/librealm-jni.so
150360 00-00-1980 00:00 lib/x86_64/libgifimage.so
477784 00-00-1980 00:00 lib/x86_64/libimagepipeline.so
3336720 00-00-1980 00:00 lib/x86_64/librealm-jni.so
์๋
ํ์ธ์ @lambdapioneer ์
๋๋ค .
๋ ๋ง์ ๋ก๊ทธ
02-21 15:14:44.524 25391-25537/com.mobix.pinecone E/art: dlopen("/data/data/com.mobix.pinecone/lib-main/libimagepipeline.so", RTLD_LAZY) failed: dlopen failed: "/data/data/com.mobix.pinecone/lib-main/libimagepipeline.so" is 64-bit instead of 32-bit
02-21 15:14:44.524 25391-25537/com.mobix.pinecone E/SoLoader: Could not load: libimagepipeline.so
02-21 15:14:44.537 25391-25537/com.mobix.pinecone E/AndroidRuntime: FATAL EXCEPTION: FrescoIoBoundExecutor-2
Process: com.mobix.pinecone, PID: 25391
java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libimagepipeline.so
at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:522)
at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:420)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:370)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:335)
at com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:42)
at com.facebook.imagepipeline.memory.NativeMemoryChunk.<clinit>(NativeMemoryChunk.java:33)
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
at com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.<init>(NativePooledByteBufferOutputStream.java:51)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
at com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:89)
at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:101)
at com.facebook.imagepipeline.producers.LocalResourceFetchProducer.getEncodedImage(LocalResourceFetchProducer.java:39)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:54)
at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:50)
at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:45)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
at java.lang.Thread.run(Thread.java:818)
์๋
@oprisnik
๋๋ ๊ทธ๊ฒ์ ๊ณ ์น๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
java.lang.UnsatisfiedLinkError: ๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
com.facebook.soloader.jb(SourceFile:522)
com.facebook.soloader.ja์์(SourceFile:420)
com.facebook.soloader.ja์์(SourceFile:370)
com.facebook.soloader.ja์์(SourceFile:335)
com.facebook.imagepipeline.nativecode.aa(SourceFile:42)
com.facebook.imagepipeline.memory.NativeMemoryChunk์์.
com.facebook.imagepipeline.memory.li(SourceFile:58)
com.facebook.imagepipeline.memory.lb(SourceFile:20)
com.facebook.imagepipeline.memory.aa(SourceFile:257)
com.facebook.imagepipeline.memory.o์์
com.facebook.imagepipeline.memory.nb(SourceFile:98)
com.facebook.imagepipeline.memory.na(SourceFile:26)
com.facebook.imagepipeline.producers.za์์(SourceFile:89)
com.facebook.imagepipeline.producers.zb(SourceFile:101)
com.facebook.imagepipeline.producers.aa.a(SourceFile:34)์์
com.facebook.imagepipeline.producers.z$1.d(SourceFile:54)์์
com.facebook.imagepipeline.producers.z$1.c(SourceFile:50)์์
com.facebook.common.berun์์(SourceFile:45)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)์์
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
com.facebook.imagepipeline.dk$1.run(SourceFile:53)
java.lang.Thread.run(Thread.java:818)์์
@hsandyque
์ฑ gradle ํ์ผ์ ABI(CPU ์ ํ) ํํฐ๋ฅผ ์ง์ ํฉ๋๊น?
@erikandre
๋ด gradle ํ์ผ์ ABI ํํฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ฏธ ์ด์ ํ์ ์ ์ธ๋ถ ์ค์ ์ ๋์ดํฉ๋๋ค.
๋ฒ์ 1.8.1์ ์ฌ์ฉํ๋๋ฐ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฅ์น๋ VIVO X7(Android 5.1.1,arm64-v8a)์ ๋๋ค.
java.lang.UnsatisfiedLinkError
com.facebook.imagepipeline.memory.NativeMemoryChunk
2 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
3 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
4 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.
5 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
6 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
7 com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:89)
8 com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:101)
9 com.facebook.imagepipeline.producers.LocalFileFetchProducer.getEncodedImage(LocalFileFetchProducer.java:34)
10 com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:54)
11 com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:50)
12 com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:45)
13 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
14 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
15 com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
16 java.lang.Thread.run(Thread.java:818)
java.lang.UnsatisfiedLinkError
๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
2 com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:420)
3 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:370)
4 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:335)
5 com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:42)
6 com.facebook.imagepipeline.memory.NativeMemoryChunk.
7 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
8 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
9 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
10 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.
11 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
12 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
13 com.facebook.imagepipeline.cache.BufferedDiskCache.readFromDiskCache(BufferedDiskCache.java:336)
14 com.facebook.imagepipeline.cache.BufferedDiskCache.access$400(BufferedDiskCache.java:36)
15 com.facebook.imagepipeline.cache.BufferedDiskCache$2.call(BufferedDiskCache.java:182)
16 com.facebook.imagepipeline.cache.BufferedDiskCache$2.call(BufferedDiskCache.java:166)
17๋ณผํธ.Task$4.run(Task.java:357)
18 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
19 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
20 com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
21 java.lang.Thread.run(Thread.java:818)
์์ ์ฌํญ์ด ์๋์? ์ด๊ฒ์ ๋ด ๋ก๊ทธ์
๋๋ค
์น๋ช
์ ์ธ ์์ธ: java.lang.UnsatisfiedLinkError: ๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:522)
com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:420)
com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:370)
com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:335)
com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:42)
com.facebook.imagepipeline.memory.NativeMemoryChunk์์.
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream์์.
com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newOutputStream(NativePooledByteBufferFactory.java:141)
com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newOutputStream(NativePooledByteBufferFactory.java:26)
com.facebook.imagepipeline.producers.NetworkFetchProducer.onResponse(NetworkFetchProducer.java:90)
com.facebook.imagepipeline.producers.NetworkFetchProducer$1.onResponse(NetworkFetchProducer.java:70)
com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher$2.onResponse(OkHttpNetworkFetcher.java:180)
okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)์์
okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)์์
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
java.lang.Thread.run(Thread.java:818)์์
@wangshuwen1107 @csbz17027 @ignaciogs
Facebook์์ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ํ์ธํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ์ผ์์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค.
dlopen("/data/data/xxx/lib-main/libimagepipeline.so", RTLD_LAZY) failed: dlopen failed: "/data/data/xxx/lib-main/libimagepipeline.so" is 64-bit instead of 32-bit
๋ด๊ฐ ์ฐพ์ ๋ก๊ทธ๋ ์ด๋ฌํ ํน์ ์ฅ์น๊ฐ 32๋นํธ๋ก ์ฑ์ ์คํํ์ง๋ง(์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ๋ ์์ํฌ ๋ฒ๊ทธ์ผ ์ ์์) libimagepipeline.so๋ 64๋นํธ์ ๋๋ค.
๋ค์ ์ฝ๋ ์ค๋
๊ณผ ๊ฐ์ด API ํํฐ๋ฅผ ์ถ๊ฐํ๊ณ "arm64-v8a"๋ฅผ ๊ฑด๋๋๋๋ค.
defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "x86_64", "mips", "mips64"
}
}
์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ
์ ์๋์ง๋ง ์ฒ์์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ค์ ์
๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
@hsandyque ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ๊ทํ์ ์๋ต์ ๋งค์ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทํ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ํฉ๋๋ค!
@oprisnik @erikandre @lambdapioneer
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
@hsandyque ์์คํ ์ด 32๋นํธ ๋ฐ 64๋นํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํผํฉ๊ณผ ํผ๋๋ ์ ์๋ ๋ค๋ฅธ ์ข ์์ฑ์ ๋ก๋ํฉ๋๊น?
์ด ๊ฒฝ์ฐ ๋ค์ abiFilters
ํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"}
ํน๋ณํ ์ฅ์น๋ฅผ ํน๋ณํ ํ๊ฒํ
ํ์ง ์๋ ๊ฒฝ์ฐ mips
๋ชจ๋ ๋จ์ด๋จ๋ฆด ์๋ ์์ต๋๋ค.
v1.9.0์์ ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฒจ๊ฐ
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86"
}
๋๋ฅผ ์ํด ์ผํ๋ค. ๊ทธ๋ฌ๋ ์์ ๋ํ๋ฅผ ์ฝ์ผ๋ฉด "์ฌ๋ฐ๋ฅธ"ํด๊ฒฐ์ฑ ์ด ์๋ ๊ฒ ๊ฐ์ต๋๊น?
์ฐ๋ฆฌ ํ์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ณ ์ด์ ๊ฐ์ ์ธ ๋ฒ์งธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ถฉ๋ ๋ณด๊ณ ์(ํ๋ ์ค์ฝ์ OOM ์์ธ)๋ฅผ ๋๋ฌด ๋ง์ด ๋ฐ์ง ๋ชปํ์ต๋๋ค. ์ด์ ์๋ณ์ ๊ณ ํ ์๊ฐ์ ๋๋ค!
๋๋ ์ฌ์ฉํ๋ค
ndk {
abiFilters "armeabi,armeabi-v7a"
}
๊ทธ๋ฆฌ๊ณ
compile 'com.facebook.fresco:fresco:1.8.0'
compile 'com.facebook.fresco:animated-gif:1.8.0'
compile 'com.facebook.fresco:animated-webp:1.8.0'
compile 'com.facebook.fresco:webpsupport:1.8.0'
๋ํ ๋์ผํ ์ถฉ๋์ด ์์ต๋๋ค.
v1.9.0์์ ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
abis "armeabi", "armeabi-v7a", "x86"์ด ์ง์๋๋ 1.9.0์์ ์ฌ์ ํ ํด๋น ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค.
v1.9.0์์ ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด ์ฑ์ด ์ด๋ฆด ๋ ์ถฉ๋ํฉ๋๋ค. Android 5.0.2์์ ์คํ๋๋ HTC One E9PLUS ๋์ผ SIM์์๋ง ๋ฐ์ํฉ๋๋ค.
์ค๋ฅ: ์น๋ช
์ ์์ธ: java.lang.UnsatisfiedLinkError
๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
์ ๋ฐ์ดํธ: ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ Fresco ์น์ฌ์ดํธ ์์
๋ํ ๋ค์ํ ์ฅ์น์์ ์ด ๋ฌธ์ ๊ฐ ํ์๋ฉ๋๋ค.
Fresco ๋ฒ์ 1.9.0 ๋ฐ ABI ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ APK ํฌ๊ธฐ ์ค์ด๊ธฐ:
ndk {
abiFilters "armeabi-v7a", "x86"
}
์ด ๋ฌธ์ ๋ Fresco๋ฅผ 1.5.0์์ 1.9.0์ผ๋ก ์ ๋ฐ์ดํธํ์ ๋ ๋ฐ์ํ๊ธฐ ์์ํ์ต๋๋ค. ์ฌ๊ธฐ์๋ ReLinker ์ฌ์ฉ์ ์ ๊ฑฐํ๊ณ ๋ช ์์ ์ผ๋ก ํฌํจ๋ proguard-fresco.pro ํ์ผ์ ์ ๊ฑฐํ๋ ์์ ๋ ํฌํจ๋์์ต๋๋ค.
์๋ ํ์ธ์, ์ต๊ทผ์ ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ํ์ํ๊ฐ์? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ๋ํ ์ด ๋ฌธ์ ์ "๋ฒ๊ทธ" ๋๋ "ํฅ์" ๋ ์ด๋ธ์ ๋ถ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ถฉ๋. ์ด๊ฒ์ ์ฌ์ ํ โโ์งํ ์ค์ธ ๋ฌธ์ ์ ๋๋ค. ์ด ์ถฉ๋์ 1.5.0์์ 1.9.0์ผ๋ก ์ ๋ฐ์ดํธํ ํ ๋ฐ์ํ์ผ๋ฉฐ ์ ์๊ฒ ์ ํฉํ ์๋ฃจ์ ์ด ์ ๊ณต๋์ง ์์์ต๋๋ค.
@jmbusby ๋น์ ์ ํ v7a ๋ง ๋์์ผ๋กํ๊ณ ์์ต๋๋ค. ์ผ๋ถ ์ฅ์น๊ฐ armv6 ๋๋ armv5์ผ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด https://forum.xda-developers.com/showthread.php?t=1596800 ์ ๋ฐ๋ฅด๋ฉด v6์ด ํฌํจ๋ ZTE ์ฅ์น๊ฐ ๊ฝค ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@oprisnik ์ถฉ๋ํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ํ๋ ARM v8 ํ๋ก์ธ์๊ฐ ์๋ Asus Zenfone 3 Max์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ZTE ์ ํ๋ ARM v8์ด ํฌํจ๋ Blade V7์ ๋๋ค.
1.8.1์์ 1.10์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋์ ์ด ๋ฌธ์ ๊ฐ ๋ํ๋ฉ๋๋ค.
์ฐ๋ฆฌ ์ฑ์์ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ์์๋ 'armeabi' ๋ฐ 'x86' ๋ถํ ๋ง ์ฌ์ฉํ๋๋ก ํฉ๋๋ค. v-1.10์ฉ Imagepipeline์ aar ํ์ผ์ ๋ณด๋ฉด 'armeabi' ๋ณํ์ด ์์ต๋๋ค. ์์ผ๋ก๋ ๊ทธ๋ด๊น์? ํด๋น ์ํคํ
์ฒ์ ๋ํ ์ง์์ ์ค๋จํ์๊ฒ ์ต๋๊น?
.so ํ์ผ์ 1.9์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ด๋ค ๋ฆฌ๋
์๋ ํ์ธ์, ์ต๊ทผ์ ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ํ์ํ๊ฐ์? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๋ฃ๋ ์ ์์ต๋๋ค. ๋ํ ์ด ๋ฌธ์ ์ "๋ฒ๊ทธ" ๋๋ "ํฅ์" ๋ ์ด๋ธ์ ๋ถ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ฌธ์ ๋ ์ฌ์ ํ ์์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ๋ค์ '๋ต๊ฒ ๋์ด' ๋ฐ๊ฐ์ต๋๋ค.
@lambdapioneer , @oprisnik ์ด ๋ฌธ์ ๋ Fresco 0.1 ์ดํ ๋ค์ํ ๋ฒ์ ์์ ๋ณด๊ณ ๋์์ต๋๋ค. ๋ฌธ์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ๋ ์ฅ์น๊ฐ ๋๋ฌด ๋ง๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ค ์ผ๋ถ๋ ๋ฌธ์ ๊ฐ ์์ ์ ๋ฐ์ ์์ต๋๋ค.
๊ถ์ฅ ์๋ฃจ์ (APK ๋ถํ )์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ์ผ์ผํต๋๋ค. ๋ฌด์๋ณด๋ค๋ APK๋ฅผ ๋ถํ ํ๋ ค๋ฉด ๊ฐ ABI์ ๋ํด ๋ณ๋์ ๋ฒ์ ์ฝ๋๊ฐ ํ์ํฉ๋๋ค. ์ด๋ฏธ ์ฌ๋ฌ ์ ํ ๋ฒ์ ๊ณผ ๋น๋ ์ ํ์ด ์๊ณ ๋ชจ๋ ๊ฒ์ด hockeyapp๊ณผ ๊ฐ์ ์ธ๋ถ ํ๋ฌ๊ทธ์ธ์ ์ํด ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ ๋ถํ ์ ํ์ ๋์ ๊ฐ๊ฒ ๋ง๋ญ๋๋ค. ์ด ์์ ์์ ์ค์ ๋ก Glide๋ก ์ ํํ๋ ๊ฒ์ด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ๋ณด๋ค ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค.
NativePooledByteBuffer๋ API>=21์์ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค. ์ด๋ ๋ง์ ์ฑ์ด ํ์ฌ ๋ชฉํ๋ก ํ๊ณ ์๋ ๊ฒ์ ๋๋ค(Dalvik์ ํ์ฌ 10%๋ก ๋จ์ด์ง). ์ ํ ์ฌํญ์ผ๋ก ๋ง๋ค๊ณ ์ดํ ํ๋ซํผ์ ํ์ค Java ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋์ค์ ์ด ์์ ์ ํ ์๋ ์์ง๋ง ์์ง FB์ ์๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ์ ํธํ ๊ฒ ๊ฐ์ต๋๋ค. :)
์๋ ํ์ธ์ @tyronen์ ๋๋ค! ์ค๋๋ง ์ด๋ค์' :)
์ข์ ํ์ด๋ฐ์ ๋๋ค. ์ค์ ๋ก ์ด ์์ ์ ํ๊ณ ์๋ ๋๊ตฐ๊ฐ๊ฐ ์์ต๋๋ค(NativePooledByteBuffer์ Java ๋ฒ์ ๋ฐ ์ ์ฌํ ํด๋์ค). ๋ฐ๋ผ์ ๊ณง ์์ ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ค์ ๊ธฐ์ฌํ๊ณ ์ถ๋ค๋ฉด ํฅํ ๊ฐ์ ์ ์ํ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฏธํด๊ฒฐ ๋ฌธ์ ์ ์์ด๋์ด๊ฐ ์์ต๋๋ค.
๋ํ Drawee์ ํ์ดํ๋ผ์ธ ๋ชจ๋์ ๋ํด ๋ช ๊ฐ์ง ๋ ํฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ผ๋์ ๋๊ณ ์์ผ๋ฏ๋ก ๊ณง ๋ณ๊ฒฝ๋ ๊ฒ์
๋๋ค.
Samsung Galaxy S9 Android 8์ ์ฌ์ ํ โโ์๋ํ์ง ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ OPPO A51
์ ํ์์ ๋ฐ์ํ์ต๋๋ค. Fresco v1.8.1
์ฌ์ฉํ๋ ๋์ ํ์๋์ง๋ง v0.12.0
๋ด์๋ ํ์๋์ง ์์ต๋๋ค.
๊ทธ๋์ ๋๋ ์ด๊ฒ์ด ๋ฌด์๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๊น? ๋ฒ์ 1.8๋ถํฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ฅ์น์์ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค...
API 'com.facebook. ์ ์ ํ: ์ ์ ํ :1.10.0'
๐๐๐
๋ชจ๋ ์ ๋ฐ์ดํธ?
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์
๊ฑฐ์ 8๊ฐ์ ๋ ๋ฌธ์ ์
๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น? ํ๋ ์ค์ฝ ๋ค์ด๊ทธ๋ ์ด๋ ๋ฐ ์๋ก๋ ์ฌ์ฉ์ด ์๋ํฉ๋๊น?
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด ๋ฌธ์ ์ ๋ํ ๋ถ๋ง์ ์ดํดํฉ๋๋ค.
๋ค์ดํฐ๋ธ ์ฝ๋์ (๋ค์ํ) ๋ฌธ์ ์ ์ด๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ ์๊ณ ์์์ ์๋ ค๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ด Fresco๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค(์: ImagePipelineExperiments#disableNativeCode ์ฐธ์กฐ). ๋ฆด๋ฆฌ์ค v1.11 ๋๋ v1.12์์ ์ค๋น๋์์ ์ ์์ต๋๋ค. @MikaelMorales์๊ฒ ๊ฒฝ์๋ฅผ ํํฉ๋๋ค.
์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด์๋ ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ ์๋ ์์ ํ ์ฌํ ์์ด ์งํํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค. ์ฌ๊ธฐ์์๋ build.gradle ํ์ผ์ ์ค๋ํซ์ด ์ถฉ๋ถํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ต์ํ์, ๊ทธ๋ฌ๋ ์์ ํ ํ๋ก์ ํธ์ฌ์ผ ํฉ๋๋ค.
๋ก์ปฌ ๋ณต์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ด ์ค๋ ๋์ ๋ชจ๋ ์ฌ๋๊ณผ ์ฐ๋ฆฌ๋ฅผ ๋ง์ด ๋์ธ ์ ์์ต๋๋ค.
์ฌ๋ฌ๋ถ์ ๋์์ด ๋ง์ด ํ์ํ ๋ฌธ์ ์ ๋๋ค! stale-bot์ด ์กฐ์ฉํ ์ ์ง๋๋๋ก "๋ฒ๊ทธ" ํ๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
@ch4ndu , armeabi
์ ์ต์ Fresco ๋ฒ์ ์ด ๋๋ฝ๋์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด์ฐฐํ์ต๋๋ค. NDK r17(https://developer.android.com/ndk/guides/abis)์์ ์ ๊ฑฐ๋์์ต๋๋ค.
W/System.err: java.lang.UnsatisfiedLinkError: ๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
ํด๊ฒฐ ๋ฐฉ๋ฒ
ndk { abiFilters "armeabi" }
๊ตฌํ 'com.facebook. ํ๋ ์ค์ฝ:ํ๋ ์ค์ฝ :1.11.0'
๊ตฌํ 'com.facebook. ํ๋ ์ค์ฝ:์ ๋๋ฉ์ด์
-gif:1.11.0'
๊ตฌํ 'com.facebook. ํ๋ ์ค์ฝ:์ ๋๋ฉ์ด์
-webp :1.11.0'
๊ตฌํ 'com.facebook. ํ๋ ์ค์ฝ:webpsupport :1.11.0'
์๋ ํ์ธ์, ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ Fresco 1.11์ ์ฌ์ฉํ์ฌ ์ฑ์์ ์ผ๋ถ ์ ์ ์ด๋ฏธ์ง์ ์ ๋๋ฉ์ด์
GIF๋ฅผ ๋ก๋ํฉ๋๋ค. ๋ ๋ค APK๋ฅผ ๋น๋ํ๊ณ ์ค์นํ ๋ ์ ์๋ํ์ง๋ง Android Studio์์ ์ฑ ๋ฒ๋ค์ ๋น๋ํ๊ณ bundletool์ ์ฌ์ฉํ์ฌ APK๋ฅผ ๋น๋( build-apks
) ๋ฐ ์ค์น( install-apks
)ํ ๋๋ ์๋ํ์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ GIF๋ ๋ก๋๋์ง ์์ง๋ง GIF๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋ ์ฑ์ด ๋ค์ด๋์ง ์๊ณ ์ ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ๋ฉด ์ฑ์ด ๋ค์ด๋ฉ๋๋ค( couldn't find DSO to load: libimagepipeline.so
).
Fresco์ ImagePipelineConfig์์ .experiment().setNativeCodeDisabled(true)
์ค์ ์ ์๋ํ๋๋ฐ ์ ์ ์ด๋ฏธ์ง๋ ์๋ํ์ง๋ง GIF๋ ๋ค๋ฅธ ์ค๋ฅ( couldn't find DSO to load: libgifimage.so
)๋ก ์ถฉ๋ํฉ๋๋ค. ์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์๋๋ผ๋ ํ๋ก๋์
์์ ".experiment()"๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ์ง ์์ ๊ฒ์
๋๋ค.
Android Gradle ํ๋ฌ๊ทธ์ธ 3.2.1, Android Studio 3.3 ๋ฒ ํ 4 ๋ฐ bundletool 0.7.1์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. Android 8.1.0 ์ ํ์์ ํ ์คํธ ์ค์ ๋๋ค.
์ฑ ๋ฒ๋ค๊ณผ ํจ๊ป Fresco๋ฅผ ์์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ํ์ฌ ์๋ก์ด ํ์์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๋ฐฉํดํ๊ณ ์์ต๋๋ค. ๊ฐ์ฌ!
์คํ์ ์ผ ํ GIF๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ถฉ๋์ ๋๋ค.
11-22 16:39:03.339 18019 18019 D SoLoader: init start
11-22 16:39:03.340 18019 18019 D SoLoader: adding system library source: /vendor/lib
11-22 16:39:03.340 18019 18019 D SoLoader: adding system library source: /system/lib
11-22 16:39:03.340 18019 18019 D SoLoader: adding application source: com.facebook.soloader.DirectorySoSource[root = /data/app/com.packagename--UQkiLx1zhtubNxSl35TMg==/lib/arm64 flags = 0]
11-22 16:39:03.341 18019 18019 D SoLoader: adding backup source: com.facebook.soloader.ApkSoSource[root = /data/data/com.packagename/lib-main flags = 1]
11-22 16:39:03.341 18019 18019 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /system/lib flags = 2]
11-22 16:39:03.341 18019 18019 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /vendor/lib flags = 2]
11-22 16:39:03.341 18019 18019 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /data/app/com.packagename--UQkiLx1zhtubNxSl35TMg==/lib/arm64 flags = 0]
11-22 16:39:03.342 18019 18019 D SoLoader: Preparing SO source: com.facebook.soloader.ApkSoSource[root = /data/data/com.packagename/lib-main flags = 1]
11-22 16:39:03.343 18019 18019 V fb-UnpackingSoSource: locked dso store /data/user/0/com.packagename/lib-main
11-22 16:39:03.347 18019 18019 I fb-UnpackingSoSource: dso store is up-to-date: /data/user/0/com.packagename/lib-main
11-22 16:39:03.347 18019 18019 V fb-UnpackingSoSource: releasing dso store lock for /data/user/0/com.packagename/lib-main
11-22 16:39:03.347 18019 18019 D SoLoader: init finish: 4 SO sources prepared
11-22 16:39:03.347 18019 18019 D SoLoader: init exiting
11-22 16:39:04.327 18019 18293 D SoLoader: About to load: libgifimage.so
11-22 16:39:04.328 18019 18293 D SoLoader: libgifimage.so not found on /data/data/com.packagename/lib-main
11-22 16:39:04.328 18019 18293 D SoLoader: libgifimage.so not found on /data/app/com.packagename--UQkiLx1zhtubNxSl35TMg==/lib/arm64
11-22 16:39:04.329 18019 18293 D SoLoader: libgifimage.so not found on /vendor/lib
11-22 16:39:04.329 18019 18293 D SoLoader: libgifimage.so not found on /system/lib
11-22 16:39:04.339 18019 18293 E SoLoader: couldn't find DSO to load: libgifimage.so
11-22 16:39:04.348 18019 18293 E AndroidRuntime: FATAL EXCEPTION: FrescoDecodeExecutor-2
11-22 16:39:04.348 18019 18293 E AndroidRuntime: Process: com.packagename, PID: 18019
11-22 16:39:04.348 18019 18293 E AndroidRuntime: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libgifimage.so
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:703)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:564)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:500)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:455)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.animated.gif.GifImage.ensure(GifImage.java:42)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.animated.gif.GifImage.create(GifImage.java:70)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.animated.gif.GifImage.decode(GifImage.java:89)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.animated.factory.AnimatedImageFactoryImpl.decodeGif(AnimatedImageFactoryImpl.java:85)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.fresco.animation.factory.AnimatedFactoryV2Impl$1.decode(AnimatedFactoryV2Impl.java:86)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeGif(DefaultImageDecoder.java:136)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:60)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:121)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:276)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200(DecodeProducer.java:123)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:165)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:202)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:22)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:73)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:51)
11-22 16:39:04.348 18019 18293 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
์คํ์ ์ผ๊ธฐ ์ ์ ์ ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ถฉ๋์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ถ์ ์ GIF๋ฅผ ๋ก๋ํ๋ ค๊ณ ํ ๋ ์ ์ฌํ์ง๋ง ์น๋ช
์ ์ธ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค( couldn't find DSO to load: libimagepipeline.so
).
11-22 16:08:49.551 13724 13724 D SoLoader: init start
11-22 16:08:49.551 13724 13724 D SoLoader: adding system library source: /vendor/lib
11-22 16:08:49.551 13724 13724 D SoLoader: adding system library source: /system/lib
11-22 16:08:49.552 13724 13724 D SoLoader: adding application source: com.facebook.soloader.DirectorySoSource[root = /data/app/com.packagename-VWSKdOesFkJ5ehUD4vU9aw==/lib/arm64 flags = 0]
11-22 16:08:49.552 13724 13724 D SoLoader: adding backup source: com.facebook.soloader.ApkSoSource[root = /data/data/com.packagename/lib-main flags = 1]
11-22 16:08:49.552 13724 13724 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /system/lib flags = 2]
11-22 16:08:49.553 13724 13724 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /vendor/lib flags = 2]
11-22 16:08:49.553 13724 13724 D SoLoader: Preparing SO source: com.facebook.soloader.DirectorySoSource[root = /data/app/com.packagename-VWSKdOesFkJ5ehUD4vU9aw==/lib/arm64 flags = 0]
11-22 16:08:49.553 13724 13724 D SoLoader: Preparing SO source: com.facebook.soloader.ApkSoSource[root = /data/data/com.packagename/lib-main flags = 1]
11-22 16:08:49.554 13724 13724 V fb-UnpackingSoSource: locked dso store /data/user/0/com.packagename/lib-main
11-22 16:08:49.556 13724 13724 I fb-UnpackingSoSource: dso store is up-to-date: /data/user/0/com.packagename/lib-main
11-22 16:08:49.556 13724 13724 V fb-UnpackingSoSource: releasing dso store lock for /data/user/0/com.packagename/lib-main
11-22 16:08:49.556 13724 13724 D SoLoader: init finish: 4 SO sources prepared
11-22 16:08:49.556 13724 13724 D SoLoader: init exiting
11-22 16:08:50.468 13724 13809 D SoLoader: About to load: libimagepipeline.so
11-22 16:08:50.472 13724 13809 D SoLoader: libimagepipeline.so not found on /data/data/com.packagename/lib-main
11-22 16:08:50.472 13724 13809 D SoLoader: libimagepipeline.so not found on /data/app/com.packagename-VWSKdOesFkJ5ehUD4vU9aw==/lib/arm64
11-22 16:08:50.472 13724 13809 D SoLoader: libimagepipeline.so not found on /vendor/lib
11-22 16:08:50.473 13724 13809 D SoLoader: libimagepipeline.so not found on /system/lib
11-22 16:08:50.476 13724 13809 E SoLoader: couldn't find DSO to load: libimagepipeline.so
11-22 16:08:50.480 13724 13815 I zygote64: Rejecting re-init on previously-failed class java.lang.Class<com.facebook.imagepipeline.memory.NativeMemoryChunk>: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libimagepipeline.so
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.soloader.SoLoader.doLoadLibraryBySoName(java.lang.String, int, android.os.StrictMode$ThreadPolicy) (SoLoader.java:703)
11-22 16:08:50.481 13724 13815 I zygote64: at boolean com.facebook.soloader.SoLoader.loadLibraryBySoName(java.lang.String, java.lang.String, java.lang.String, int, android.os.StrictMode$ThreadPolicy) (SoLoader.java:564)
11-22 16:08:50.481 13724 13815 I zygote64: at boolean com.facebook.soloader.SoLoader.loadLibrary(java.lang.String, int) (SoLoader.java:500)
11-22 16:08:50.481 13724 13815 I zygote64: at boolean com.facebook.soloader.SoLoader.loadLibrary(java.lang.String) (SoLoader.java:455)
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load() (ImagePipelineNativeLoader.java:40)
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.imagepipeline.memory.NativeMemoryChunk.<clinit>() (NativeMemoryChunk.java:31)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.memory.NativeMemoryChunk com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(int) (NativeMemoryChunkPool.java:25)
11-22 16:08:50.481 13724 13815 I zygote64: at java.lang.Object com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(int) (NativeMemoryChunkPool.java:13)
11-22 16:08:50.481 13724 13815 I zygote64: at java.lang.Object com.facebook.imagepipeline.memory.BasePool.get(int) (BasePool.java:267)
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.imagepipeline.memory.MemoryPooledByteBufferOutputStream.<init>(com.facebook.imagepipeline.memory.MemoryChunkPool, int) (MemoryPooledByteBufferOutputStream.java:51)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.memory.MemoryPooledByteBuffer com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(java.io.InputStream, int) (MemoryPooledByteBufferFactory.java:73)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.common.memory.PooledByteBuffer com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(java.io.InputStream, int) (MemoryPooledByteBufferFactory.java:24)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.image.EncodedImage com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(java.io.InputStream, int) (LocalFetchProducer.java:87)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.image.EncodedImage com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(java.io.InputStream, int) (LocalFetchProducer.java:99)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.image.EncodedImage com.facebook.imagepipeline.producers.LocalAssetFetchProducer.getEncodedImage(com.facebook.imagepipeline.request.ImageRequest) (LocalAssetFetchProducer.java:37)
11-22 16:08:50.481 13724 13815 I zygote64: at com.facebook.imagepipeline.image.EncodedImage com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult() (LocalFetchProducer.java:52)
11-22 16:08:50.481 13724 13815 I zygote64: at java.lang.Object com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult() (LocalFetchProducer.java:48)
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.common.executors.StatefulRunnable.run() (StatefulRunnable.java:43)
11-22 16:08:50.481 13724 13815 I zygote64: at void java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) (ThreadPoolExecutor.java:1162)
11-22 16:08:50.481 13724 13815 I zygote64: at void java.util.concurrent.ThreadPoolExecutor$Worker.run() (ThreadPoolExecutor.java:636)
11-22 16:08:50.481 13724 13815 I zygote64: at void com.facebook.imagepipeline.core.PriorityThreadFactory$1.run() (PriorityThreadFactory.java:51)
11-22 16:08:50.481 13724 13815 I zygote64: at void java.lang.Thread.run() (Thread.java:764)
11-22 16:08:50.481 13724 13815 I zygote64:
11-22 16:08:50.507 13724 13809 E AndroidRuntime: FATAL EXCEPTION: FrescoIoBoundExecutor-1
11-22 16:08:50.507 13724 13809 E AndroidRuntime: Process: com.packagename, PID: 13724
11-22 16:08:50.507 13724 13809 E AndroidRuntime: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libimagepipeline.so
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:703)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:564)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:500)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:455)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:40)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.NativeMemoryChunk.<clinit>(NativeMemoryChunk.java:31)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:25)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:13)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:267)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferOutputStream.<init>(MemoryPooledByteBufferOutputStream.java:51)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:73)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:24)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:87)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:99)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalAssetFetchProducer.getEncodedImage(LocalAssetFetchProducer.java:37)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:52)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:48)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:43)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:51)
11-22 16:08:50.507 13724 13809 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: FATAL EXCEPTION: FrescoIoBoundExecutor-2
11-22 16:08:50.512 13724 13810 E AndroidRuntime: Process: com.packagename, PID: 13724
11-22 16:08:50.512 13724 13810 E AndroidRuntime: java.lang.NoClassDefFoundError: <clinit> failed for class com.facebook.imagepipeline.memory.NativeMemoryChunk; see exception in other thread
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:25)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:13)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:267)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferOutputStream.<init>(MemoryPooledByteBufferOutputStream.java:51)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:73)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.memory.MemoryPooledByteBufferFactory.newByteBuffer(MemoryPooledByteBufferFactory.java:24)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:87)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:99)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalAssetFetchProducer.getEncodedImage(LocalAssetFetchProducer.java:37)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:52)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:48)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:43)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:51)
11-22 16:08:50.512 13724 13810 E AndroidRuntime: at java.lang.Thread.run(Thread.java:764)
์๋ ๋ค์,
์ผ์ผ์ด์ค ์ฑ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฌํํ์ฌ v1.11.0 ๋ ์ด๋ธ์ ํ์ธํ์ง๋ง ์ปดํ์ผ๋์ง ์์ต๋๋ค. https://frescolib.org/docs/building-from-source.html ์ ๋ฐ๋ฅด๋ ค๊ณ ์๋ํ์ง๋ง ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค(์: android-ndk/r10e ํด๋์ ๋ํด ์ด์ผ๊ธฐํ์ง๋ง ๋ด ์ค์น์๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ ์ต์ ๋ฒ์ ์ r18b์ ๋๋ค).
Android Studio์์ ์ผ์ผ์ด์ค ์ฑ์ ์คํํ๋ ค๊ณ ํ๋ฉด Process 'command '<mySdkPath>/ndk-bundle/ndk-build'' finished with non-zero exit value 2
๋ฉ๋๋ค.
๋ช
๋ น์ค์์ ./gradlew build
๋ฅผ ์คํํ๋ฉด ๋ค์์ ์ป์ต๋๋ค.
> Task :imagepipeline:ndk_build_bitmaps FAILED
A problem was found with the configuration of task ':imagepipeline:ndk_build_bitmaps'. Registering invalid inputs and outputs via TaskInputs and TaskOutputs methods has been deprecated and is scheduled to be removed in Gradle 5.0.
- File '<myWorkspace>/fresco/imagepipeline/src/main/jni/bitmaps' specified for property '$1' is not a file.
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.
make: Entering directory `<myWorkspace>/fresco/imagepipeline/src/main/jni/bitmaps'
<mySdkPath>/ndk-bundle/build/core/add-application.mk:178: *** make: Leaving directory `<myWorkspace>/fresco/imagepipeline/src/main/jni/bitmaps'
Android NDK: APP_STL gnustl_static is no longer supported. Please switch to either c++_static or c++_shared. See https://developer.android.com/ndk/guides/cpp-support.html for more information. . Stop.
FAILURE: Build failed with an exception.
APP_PLATFORM์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ค์ ํด ๋ณด์๋๋ฐ ์ด์ ๋ํ ์ค์ด ์ฌ๋ผ์ง์ง๋ง ์ค๋ฅ๋ ๋์ผํฉ๋๋ค.
์ด ๋ฌธ์ ๋ Android Studio 3.3 RC 1์์ ๊ณ์ ๋ฐ์ํฉ๋๋ค.
๋์ ์ค์!
java.lang.UnsatisfiedLinkError: ๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so ์์ธ: dlopen ์คํจ: "/data/data/com.vipabc.vipmobilejr.phone/lib-main/libimagepipeline.so"๋ ๋์ 64๋นํธ์ ๋๋ค. 32๋นํธ
okhttp ํตํฉ์ ์ฌ์ฉํ ๋๋ง ์ด ๋ฌธ์ ๊ฐ ๋ํ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ ์์ด๋ ๋ด ์ฑ์ด ์ด๋ฏธ์ง ๋ค์ด๋ก๋๋ฅผ ์์ํ์ง ์์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ด ๋ฌธ์ ์ ๋ํ ๋ถ๋ง์ ์ดํดํฉ๋๋ค.
๋ค์ดํฐ๋ธ ์ฝ๋์ (๋ค์ํ) ๋ฌธ์ ์ ์ด๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ ์๊ณ ์์์ ์๋ ค๋๋ฆฝ๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ด Fresco๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค(์: ImagePipelineExperiments#disableNativeCode ์ฐธ์กฐ). ๋ฆด๋ฆฌ์ค v1.11 ๋๋ v1.12์์ ์ค๋น๋์์ ์ ์์ต๋๋ค. @MikaelMorales์๊ฒ ๊ฒฝ์๋ฅผ ํํฉ๋๋ค.
์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด์๋ ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ ์๋ ์์ ํ ์ฌํ ์์ด ์งํํ๊ธฐ๊ฐ ์ ๋ง ์ด๋ ต์ต๋๋ค. ์ฌ๊ธฐ์์๋ build.gradle ํ์ผ์ ์ค๋ํซ์ด ์ถฉ๋ถํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ต์ํ์, ๊ทธ๋ฌ๋ ์์ ํ ํ๋ก์ ํธ์ฌ์ผ ํฉ๋๋ค.
๋ก์ปฌ ๋ณต์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ด ์ค๋ ๋์ ๋ชจ๋ ์ฌ๋๊ณผ ์ฐ๋ฆฌ๋ฅผ ๋ง์ด ๋์ธ ์ ์์ต๋๋ค.
- ์ผ์ผ์ด์ค ์ฑ์ผ๋ก ์ฌ์์ฑ ํ์ธ ์ค
- ๊ทธ๋ฐ ๋ค์ ์ ์ฐจ์ ์ผ๋ก ์ผ์ผ์ด์ค ์ฑ์์ ๋น๋ ๊ตฌ์ฑ์ผ๋ก ์ด๋ํ์ฌ ์ค๋จ๋๋ ์ง์ ์ ๊ด์ฐฐํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ ๋์์ด ๋ง์ด ํ์ํ ๋ฌธ์ ์ ๋๋ค! stale-bot์ด ์กฐ์ฉํ ์ ์ง๋๋๋ก "๋ฒ๊ทธ" ํ๊ทธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
@ch4ndu ,
armeabi
์ ์ต์ Fresco ๋ฒ์ ์ด ๋๋ฝ๋์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด์ฐฐํ์ต๋๋ค. NDK r17(https://developer.android.com/ndk/guides/abis)์์ ์ ๊ฑฐ๋์์ต๋๋ค.
Android 5.1.1์ด ์ค์น๋ OPPO r7์ ๊ตฌ์
ํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ง์ ์ฌํํ ์ ์์ต๋๋ค.
์์ธ๋ฅผ ๋ฐ์์ํค๋ ค๋ฉด okhttp์ ํตํฉํด์ผ ํฉ๋๋ค.
๊ทธ๋์ ๋ฒ๊ทธ ์์ ์ด๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค๋ซ๋์ ๊ทธ๋ฌํ ๋ฒ๊ทธ๊ฐ ํฐ NO์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์ผ์ข ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. build.gradle์ Android ํ๊ทธ์ ์ด๊ฒ์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
packagingOptions {
exclude "lib/arm64-v8a/libimagepipeline.so"
exclude "lib/arm64-v8a/libnative-imagetranscoder.so"
}
๊ทธ๋ ๊ฒ ํฐ ๋ฌธ์ ๋ ์๋๋๋ค. 2017๋ ์ดํ๋ก Google API์๋ ์์ง ํด๊ฒฐ๋์ง ์์ ๋ฒ๊ทธ๊ฐ ๋ง์ด ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ด ์ฑ์์ ํ๋ฃจ์ 2000๊ฑด์ ์ถฉ๋์ด ๋ฐ์ํ์ต๋๋ค. ๊ทธ๋ค์ ๋ฒ๊ทธ๋ฅผ ์๋ก์ด ๊ธฐ๋ฅ๋งํผ ์ค์ํ๊ฒ ์๊ฐํ์ง ์์ต๋๋ค. ์ผ์ฃผ์ผ ๋ง์ ํด๊ฒฐํ๋ ๊ฒ์ ํธ์ํฐ๋ฟ์ ๋๋ค.
๋ฐ๋ผ์ ์ ์ธ ์ต์ ๋ ์์ ํ ์๋ํ์ง ์์ต๋๋ค. ์ผ๋ถ Samsung ์ฅ์น(S8 ๋ฐ Xcover4)์์ ์ถฉ๋์ด ๋ฐ์ํ์ต๋๋ค.
๋ ๋์ ํด๊ฒฐ ๋ฐฉ๋ฒ: simpledrawview์์ ์ด๋ฏธ์ง๋ฅผ ๋น ๋ฅด๊ณ ๋ถ๋๋ฝ๊ฒ ํ์ํ๋ ค๋ฉด fresco 1.7.1์ ์ฌ์ฉํ์ธ์.
ํฌ๊ธฐ ์กฐ์ ์ ์ํด ๊ธ๋ผ์ด๋๋ฅผ ์ฌ์ฉํ์ญ์์ค(1.7.1์ด ๋๋๋ก ํฐ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์กฐ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ - 1.12.1์ ๊ทธ๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ 1.12.1์๋ ์ด .so ๋ฒ๊ทธ/์ถฉ๋์ด ์์ต๋๋ค).
PS.: Picasso๋ ์๋ํ์ง๋ง ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.(2.7 ๋ฒ์ ์์๋).
(๋๋ ๋ ์ด์ Fresco์์ ์ผํ์ง ์์ผ๋ฉฐ ์ฌ์ฉ์๋ก์ ๋งํ๊ณ ์์์ ์ ์ํ์ญ์์ค)
Fresco 1.11 ์ด์์ด ํ์ํ ์ด ๋ฌธ์ ์ ๋ํด ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ํ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฒํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ด๋ฏธ์ง ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํฉ๋๋ค(okhttp ์).
ImagePipelineConfig config =
OkHttpImagePipelineConfigFactory.newBuilder(context, okHttpClient)
.setMemoryChunkType(MemoryChunkType.BUFFER_MEMORY)
.build()
Fresco.initialize(context, config);
Android 4.x ์ดํ ๋ฐ 1GB ๋ฏธ๋ง์ RAM์ ์คํํ๋ ๊ธฐ๊ธฐ์๋ ์ด ์๋ฃจ์ ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋ํ ๊ธฐ๋ณธ ํํฐ ๋๋ ํธ๋์ค์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ gradle ํ์ผ์์ ์ ์ธํด์ผ ํฉ๋๋ค.
implementation('com.facebook.fresco:fresco:1.12.1') {
exclude module: 'nativeimagefilters'
exclude module: 'nativeimagetranscoder'
}
์ด๊ฒ์ด ์ฐ๋ฆฌ ์ฑ์ ๋ฒ๊ทธ๋ฅผ ์ ๊ฑฐํ๋์ง ํ์ธํ๋ ๋ฐ 1~2์ฃผ๊ฐ ์์๋ฉ๋๋ค. @oprisnik , ๋ฌธ์์ ์ถ๊ฐํ ์ ์์ต๋๊น? ๋ํ ์ด ๋ณ๊ฒฝ์ผ๋ก libimagepipeline.so๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฑ์์ ์ ์ธํ ์ ์์ด์ผ ํ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ๋ก๋์ ์์ ๊ทํ์ ์๋ฃจ์ ์ ์ฌ์ฉํ์ต๋๋ค.
๊ตฌํ('com.facebook.fresco:fresco:1.12.1') โโ{
์ ์ธ ๋ชจ๋: 'nativeimagefilters'
์ ์ธ ๋ชจ๋: '๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ํธ๋์ค์ฝ๋'
}
์ฌ์ ํ ์ถฉ๋:
java.lang.UnsatisfiedLinkError๋ก ์ธํด ๋ฐ์
๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libstatic-webp.so
com.facebook.soloader.SoLoader.initSoSources(์ ์ ์๋ ์์ค)
com.facebook.soloader.SoLoader.init (์ ์ ์๋ ์ถ์ฒ)
com.facebook.soloader.SoLoader.init (์ ์ ์๋ ์ถ์ฒ)
com.facebook.soloader.SoLoader.init (์ ์ ์๋ ์ถ์ฒ)
com.facebook.imagepipeline.nativecode.StaticWebpNativeLoader.ensure(์ ์ ์๋ ์์ค)
com.facebook.animated.webp.WebPImage.create(์ ์ ์๋ ์์ค)
@galrom ์ด๊ฒ์ static-webp ๋ชจ๋(์ด์ ์๋ webpsupport๋ก ์๋ ค์ง)์ ํฌํจํ๋ ๊ฒฝ์ฐ์๋ง ๋ฐ์ํฉ๋๋ค. ์ฑ์ด Android 4.2.0 ์ดํ๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ง ์ด ์์ ์ ์ํํด์ผ ํฉ๋๋ค. ๊ทธ๋๋ ๋ฌด์์ค ๋๋ ํฌ๋ช webp์๋ง ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ webp์ ๊ฒฝ์ฐ static-webp ์์ด Android 4.0์ผ๋ก ๋ด๋ ค๊ฐ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ์ dependency graph
๋ static-webp module
ํ์ ์ ๋ณด์ฌ์ฃผ์ง ์์ผ๋ฉฐ ์ฐ๋ฆฌ๋ ์ด ์ถฉ๋์ ๊ฒฝํํ์ต๋๋ค
Oppo os v5์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
// Fresco
api 'com.facebook.fresco:fresco:1.13.0'
api 'com.facebook.fresco:animated-webp:1.13.0'
api 'com.facebook.fresco:imagepipeline-okhttp3:1.13.0'
์ฐ๋ฆฌ ์ฑ(Memrise)์ด ์์ ๊ฒ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ถฉ๋์ ์์ ํ ์ ๊ฑฐํ์์ ํ์ธํ์ต๋๋ค. ์ฐ๋ฆฌ๋ static-webp๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
๊ต์ฅํฉ๋๋ค. @tyronen์ ํ์ธํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค. ์ด์ฉ๋ฉด ์ด๊ฒ์ >4x์ ๋ํ ๊ธฐ๋ณธ ๋์์ผ๋ก ๋ง๋ค์ด์ผ ํ ์๋ ์์ต๋๋ค.
Oppo os v5์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
// Fresco api 'com.facebook.fresco:fresco:1.13.0' api 'com.facebook.fresco:animated-webp:1.13.0' api 'com.facebook.fresco:imagepipeline-okhttp3:1.13.0'
์ ๋ ๊ฐ์ ๋ฒ์ ์ธ 1.13.0์์ ๋ง๋ฌ๋๋ฐ, arm64 ์ง์์ ์ ๊ฑฐํ์ง ์๊ณ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ์ต๋๋ค. @oprisnik
Facebook์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๋ณด๊ณ ์๋ฅผ ์์ฒญํ๋ ๋ง์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ํ์ต๋๋ค. Facebook ํ์ ๋์ ์ง์.
Oppo os v5์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
// Fresco api 'com.facebook.fresco:fresco:1.13.0' api 'com.facebook.fresco:animated-webp:1.13.0' api 'com.facebook.fresco:imagepipeline-okhttp3:1.13.0'
์ ๋ ๊ฐ์ ๋ฒ์ ์ธ 1.13.0์์ ๋ง๋ฌ๋๋ฐ, arm64 ์ง์์ ์ ๊ฑฐํ์ง ์๊ณ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์ถ์ต๋๋ค. @oprisnik
ํด๊ฒฐ์ฑ ์ ์ฐพ์ผ์ญ๋๊น?
์์ ์ค๋ช ๋ ์๋ฃจ์ ์ผ๋ก ์๋ํด ๋ณผ ์ ์์ต๋๊น? https://github.com/facebook/fresco/issues/2049#issuecomment -462880309
์์ ์ค๋ช ๋ ์๋ฃจ์ ์ผ๋ก ์๋ํด ๋ณผ ์ ์์ต๋๊น? #2049(๋๊ธ)
์ด ์๋ฃจ์ ์ ์๋ํ์ง๋ง ์ฌ์ ํ ์ฑ์ด ์ถฉ๋ํฉ๋๋ค.
๊ฐ์ ๋ฌธ์ ๏ผ๋๋ 'com.facebook.com' ๊ตฌํ์ ์ฌ์ฉํฉ๋๋ค. ํ๋ ์ค์ฝ:ํ๋ ์ค์ฝ :2.0.0'
์ ๋ 'com.facebook.com'์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ๋ ์ค์ฝ:ํ๋ ์ค์ฝ :2.0.0'.
๋ด HUAWEI HORNOR 8 ์ฅ์น์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฐฉ๊ธ ์ถ๊ฐ
ndk { abiFilters "armeabi", "armeabi-v7a", "x86" }
defaultConfig์์ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ฌ๊ธฐ์์ ๋์ผํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์คํ ๋ฒ์ 6 ์ด์ ๋ฐ ๋๋ถ๋ถ์ ์ฅ์น ๋ธ๋๋์์ ๋ฐ์ํฉ๋๋ค.
์ ๋ 'com.facebook.com'์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ๋ ์ค์ฝ:ํ๋ ์ค์ฝ :2.0.0'.
๋ด HUAWEI HORNOR 8 ์ฅ์น์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ฐฉ๊ธ ์ถ๊ฐ
ndk { abiFilters "armeabi", "armeabi-v7a", "x86" }
defaultConfig์์ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
@glovebx 32๋นํธ๋ก ์ ํํ๋ฉด 64๋นํธ์ ๋ํ Google์ ์๊ตฌ ์ฌํญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for- 64๋นํธ.html
๋ด๊ฐ ์ดํดํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด 2019๋ 8์ 1์ผ๋ถํฐ 64Bit์ ์ง์ํ๋ ค๋ฉด ์๋ก์ด ์ฑ์ด๋ ๊ธฐ์กด ์ฑ์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ ์ ์ ์ ์ถฉ์์ด ์์ต๋๋ค.
https://github.com/facebook/fresco/issues/2381#issuecomment -516825599
๊ทธ๊ฒ์ด ๋น์ ์ ๋์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค
@ShawnDongAi ๊ณต์
https://github.com/facebook/SoLoader/pull/45 ์ฌ๊ธฐ์์ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ์์ ํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ SoLoader๋ฅผ ์ ํ ์ฌํญ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ผ๋ฏ๋ก ๋์ ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
RN 0.60.5 ๋ฒ์ ์ฌ์ฉ.
ํ๋ ์ด ์คํ ์ด์์ ์ฑ์ ๋ค์ด๋ก๋ํ ๋ ์ฑ์ด ์ถฉ๋ํ๋ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ์ธ์.
ํฌ์ฅ์ต์
{
'/lib/arm64-v8a/libc++_shared.so' ์ ์ธ('/lib/arm64-v8a/error_causing_library.so' ์ ์ธ)
'/lib/x86_64/libc++_shared.so' ์ ์ธ('/lib/arm64-v8a/error_causing_library.so' ์ ์ธ)
//In pickFirst, replace the library name with the library that is causing error.
pickFirst '/lib/x86/libc++_shared.so' (pickFirst '/lib/x86/error_causing_library.so')
pickFirst '/lib/armeabi-v7a/libc++_shared.so' (pickFirst '/lib/armeabi-v7a/error_causing_library.so')
}
์ถฉ๋์ ์ผ์ผํค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ Firebase ํ ์คํธ ๋ฉ์ ๋ฒ๋ค์ ์ ๋ก๋ํ ํ ํ์ธํ์ธ์. ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ์๋ ค์ค๋๋ค.
@Balajipss ๋ ๋ชจ๋ 64๋นํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํ์ง ์์ Google์ 64๋นํธ ์๊ตฌ ์ฌํญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. https://android-developers.googleblog.com/2019/01/get-your-apps-ready-for-64-bit .html ?
@waseefakhtar ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
ํฌ์ฅ์ต์
{
์ ์ธ '/lib/arm64-v8a/libc++_shared.so'
์ ์ธ '/lib/x86_64/libc++_shared.so'
pickFirst '/lib/x86/libc++_shared.so'
pickFirst '/lib/armeabi-v7a/libc++_shared.so'
}
๋๊ตฌ๋ ์ง ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํ ๋จ๊ณ๋ณ ๋ชฉ๋ก์ด ์์ต๋๊น? ์ฐ๋ฆฌ๋ ํ๋ก๋์ ์์ ๊ทธ๊ฒ์ ์ง๋ฉดํ๊ณ ์์ง๋ง ์ถฉ๋ ์๋ฆผ์ด ํ์ํ๋ ๊ฒ๊ณผ ๋์ผํ ์ ํ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ก์ปฌ์์ ์ฌํํ ์ ์์ต๋๋ค.
@juanimoli ํ์คํ์ง ์์ง๋ง OS 5๋ฅผ ์คํํ๋ ๋๋ถ๋ถ์ Oppo ์ฅ์น๊ฐ ๋ฌธ์ ์ ์ง๋ฉดํ ๊ฒ ๊ฐ์ต๋๋ค.
@waseefakhtar Bundletool(AppBundle ์ฌ์ฉ)์ ์ฅ์น ์ฌ์ json ํ์ผ ์ต์ ์์ "armeabi-v7a"์ฉ ์ฑ์ ์ปดํ์ผํ์ฌ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์์ต๋๋ค. ์ง์๋๋ ๊ธฐ๊ธฐ์ ์ฑ์ ์ค์นํ๋๋ฐ ๋ฐ๋ก ์ถฉ๋์ด ๋ฐ์ํ์ต๋๋ค.
abiFilters ๋๋ ์ ์ธ๋ฅผ ์ถ๊ฐํ์ง ์๊ณ 2381#issuecomment-516825599 ๋ฅผ ์ ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๋๋ fresco 1.13.0์ ์ฌ์ฉํ๊ณ ํญ์ ๊ด์ฐฎ์์ต๋๋ค. 2.0.0์ผ๋ก ์ ๋ฐ์ดํธํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ APK๋ฅผ ํ์ธํ๋๋ฐ APK์ libimagepipeline.so๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ก์ ํธ๋ฅผ ์ ๋ฆฌํ๊ณ ์ APK๋ฅผ ๋น๋ํ๊ณ ์ APK์ libimagepipeline.so๊ฐ ์์ต๋๋ค. . ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ์ด๊ฒ์ ์๋ง๋ Android ์คํ๋์ค์ ๋ฌธ์ ์ผ ๊ฒ์ ๋๋ค!
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค!
defaultConfig { ... ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "x86_64", "mips", "mips64" } }
AndroidX๋ก ์
๋ฐ์ดํธํ ๋ค์ ๊ฐ์๊ธฐ ๋ก์ปฌ ํ๊ฒฝ์ couldn't find DSO to load: libimagepipeline.so
๊ฐ ์๊ฒผ์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ๋ค๋ฅธ ๊ฒฝ๋ก ๋ก
์ ๋ชจ๋ฅด๊ฒ ์ง๋ง Gradle ์บ์์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. (Gradle ์บ์๊ฐ ์ง์์ง๊ธด ํ์ง๋ง)
์์๋ ๋ถ ๊ณ์๋ฉด ๊ทผ๋ณธ โโ์์ธ์ ์๊ณ ์ถ์ต๋๋ค.
Fresco 2.1.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ๋ฐ์
๋ค์ ๋ณ๊ฒฝ์ ์ํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
implementation('com.facebook.fresco:fresco:2.1.0') {
exclude group: 'com.facebook.soloader', module: 'soloader'
}
implementation('com.facebook.fresco:imagepipeline-okhttp3:2.1.0') {
exclude group: 'com.facebook.soloader', module: 'soloader'
}
์ด ๋ณ๊ฒฝ ํ Fresco๋ ๋ชจ๋ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ๊ธฐ ์ํด soLoader๊ฐ ์๋ ๊ธฐ๋ณธ ๋ก๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
exclude group: 'com.facebook.fresco', module: 'soloader'
๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ 2.1.0 ๋ฆด๋ฆฌ์ค๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ๋ ์ต๊ทผ์ Picasso์์ Fresco๋ก ์ด์ฌํ๊ณ Playstore์์ ์ ๋ฐ์ดํธ๋ ์ฑ์ ๋ฐฉ๊ธ ์์ํ์ต๋๋ค. ์ด์ ์ฒซ ๋ฒ์งธ ๋ ์ ๋ด ์ฑ์์ ์ด ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. Trend ๊ธฐ๊ธฐ์ Android ๋ฒ์ 7.1.2์์ ์ถฉ๋์ด ๋ฐ์ํ์ต๋๋ค.
ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ์๋ฃจ์ ์ด ์์ต๋๊น?
์ ์ฌ์ ์๋ฃจ์ :
@oprisnik 2.2.0์ผ๋ก ์ ๊ทธ๋ ์ด๋๋ ์์ 3๊ฐ์ง ์๋ฃจ์ ์ ์๋ํ๊ณ Firebase์์ ์ฑ์ ํ ์คํธํ์ง๋ง ํ ์คํธ ์ค์ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
java.lang.RuntimeException: ์์ฉ ํ๋ก๊ทธ๋จ com.example.xyz.MyApplication์ ๋ง๋ค ์ ์์ต๋๋ค. java.lang.RuntimeException: ์๋ชป๋ ๊ธฐ๋ณธ ์ฝ๋ ์ค์ , ๋ฐ์์ ์คํจํ์ต๋๋ค.
API 19๋ฅผ ์คํํ๋ ๊ธฐ๊ธฐ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋๋ ์ฌ์ฉํ๋ค
` implementation('com.facebook.fresco:fresco:2.2.0') {
exclude group: 'com.facebook.soloader', module: 'soloader'
exclude group: 'com.facebook.fresco', module: 'soloader'
exclude group: 'com.facebook.fresco', module: 'nativeimagefilters'
exclude group: 'com.facebook.fresco', module: 'nativeimagetranscoder'
exclude group: 'com.facebook.fresco', module: 'memory-type-native'
exclude group: 'com.facebook.fresco', module: 'imagepipeline-native' }`
๋ค์์ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ๋ ํ๋ ์ค์ฝํ
`Fresco.initialize(
getApplicationContext(),
ImagePipelineConfig.newBuilder(getApplicationContext())
.setMemoryChunkType(MemoryChunkType.BUFFER_MEMORY)
.setImageTranscoderType(ImageTranscoderType.JAVA_TRANSCODER)
.experiment().setNativeCodeDisabled(true)
.build());`
์ ์ฒด ์คํ ์ถ์ ์
java.lang.RuntimeException: ์์ฉ ํ๋ก๊ทธ๋จ com.example.xyz.MyApplication์ ๋ง๋ค ์ ์์ต๋๋ค. java.lang.RuntimeException: ์๋ชป๋ ๊ธฐ๋ณธ ์ฝ๋ ์ค์ , ๋ฐ์์ ์คํจํ์ต๋๋ค.
์น๋ช ์ ์ธ ์์ธ: ์ฃผ์
ํ๋ก์ธ์ค: com.example.xyz, PID: 29863
java.lang.RuntimeException: ์์ฉ ํ๋ก๊ทธ๋จ com.example.xyz.MyApplication์ ๋ง๋ค ์ ์์ต๋๋ค. java.lang.RuntimeException: ์๋ชป๋ ๊ธฐ๋ณธ ์ฝ๋ ์ค์ , ๋ฐ์์ ์คํจํ์ต๋๋ค.
android.app.ActivityThread.handleBindApplication(ActivityThread.java:4423)์์
android.app.ActivityThread.access$1500(ActivityThread.java:139)์์
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)์์
android.app.ActivityThread.main(ActivityThread.java:5097)์์
java.lang.reflect.Method.invokeNative(๋ค์ดํฐ๋ธ ๋ฉ์๋)์์
java.lang.reflect.Method.invoke(Method.java:515)์์
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
dalvik.system.NativeStart.main(๋ค์ดํฐ๋ธ ๋ฉ์๋)์์
์์ธ: java.lang.RuntimeException: ์๋ชป๋ ๋ค์ดํฐ๋ธ ์ฝ๋ ์ค์ , ๋ฐ์์ ์คํจํ์ต๋๋ค.
com.facebook.imagepipeline.platform.PlatformDecoderFactory.buildPlatformDecoder(PlatformDecoderFactory.java:51)
com.facebook.imagepipeline.core.ImagePipelineFactory.getPlatformDecoder(ImagePipelineFactory.java:312)
com.facebook.imagepipeline.core.ImagePipelineFactory.getPlatformBitmapFactory(ImagePipelineFactory.java:304)
com.facebook.imagepipeline.core.ImagePipelineFactory.getAnimatedFactory(ImagePipelineFactory.java:164)
com.facebook.imagepipeline.core.ImagePipelineFactory.getImageDecoder(ImagePipelineFactory.java:227)
com.facebook.imagepipeline.core.ImagePipelineFactory.getProducerFactory(ImagePipelineFactory.java:327)
com.facebook.imagepipeline.core.ImagePipelineFactory.getProducerSequenceFactory(ImagePipelineFactory.java:360)
com.facebook.imagepipeline.core.ImagePipelineFactory.getImagePipeline(ImagePipelineFactory.java:282)
com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier์์(PipelineDraweeControllerBuilderSupplier.java:52)
com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier์์(PipelineDraweeControllerBuilderSupplier.java:43)
com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilderSupplier์์(PipelineDraweeControllerBuilderSupplier.java:36)
com.facebook.drawee.backends.pipeline.Fresco.initializeDrawee(Fresco.java:121)
com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:110)
com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:54)
com.facebook.drawee.backends.pipeline.Fresco.initialize(Fresco.java:46)
com.example.xyz.MyApplication.onCreate(MyApplication.java:26)
android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1030)์์
android.app.ActivityThread.handleBindApplication(ActivityThread.java:4420)์์
... 10๊ฐ ๋
์์ธ: java.lang.ClassNotFoundException: com.facebook.imagepipeline.platform.KitKatPurgeableDecoder
java.lang.Class.classForName(๋ค์ดํฐ๋ธ ๋ฉ์๋)์์
java.lang.Class.forName(Class.java:251)์์
java.lang.Class.forName(Class.java:216)์์
com.facebook.imagepipeline.platform.PlatformDecoderFactory.buildPlatformDecoder(PlatformDecoderFactory.java:44)
... 27๊ฐ ๋
์์ธ: java.lang.NoClassDefFoundError: com/facebook/imagepipeline/platform/KitKatPurgeableDecoder
... 31๊ฐ ๋
์์ธ: java.lang.ClassNotFoundException: ๊ฒฝ๋ก์์ "com.facebook.imagepipeline.platform.KitKatPurgeableDecoder" ํด๋์ค๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค: DexPathList[[zip ํ์ผ "/data/app/com.example.xyz-1.apk", zip ํ์ผ "/data/data/com.example.xyz/code_cache/secondary-dexes/com.example.xyz-1.apk.classes2.zip", zip ํ์ผ "/data/data/com.example.xyz/code_cache /secondary-dexes/com.example.xyz-1.apk.classes3.zip"],nativeLibraryDirectories=[/data/app-lib/com.example.xyz-1, /vendor/lib, /system/lib]]
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
java.lang.ClassLoader.loadClass(ClassLoader.java:497)์์
java.lang.ClassLoader.loadClass(ClassLoader.java:457)์์
... 31๊ฐ ๋
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฒ์ 1.8.1์ ์ฌ์ฉํ๋๋ฐ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฅ์น๋ VIVO X7(Android 5.1.1,arm64-v8a)์ ๋๋ค.
FrescoIoBoundExecutor-2(121704)
java.lang.UnsatisfiedLinkError
com.facebook.imagepipeline.memory.NativeMemoryChunk
1 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
2 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)(NativePooledByteBufferOutputStream.java:51)
3 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
4 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.
5 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
6 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
7 com.facebook.imagepipeline.producers.LocalFetchProducer.getByteBufferBackedEncodedImage(LocalFetchProducer.java:89)
8 com.facebook.imagepipeline.producers.LocalFetchProducer.getEncodedImage(LocalFetchProducer.java:101)
9 com.facebook.imagepipeline.producers.LocalFileFetchProducer.getEncodedImage(LocalFileFetchProducer.java:34)
10 com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:54)
11 com.facebook.imagepipeline.producers.LocalFetchProducer$1.getResult(LocalFetchProducer.java:50)
12 com.facebook.common.executors.StatefulRunnable.run(StatefulRunnable.java:45)
13 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
14 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
15 com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
16 java.lang.Thread.run(Thread.java:818)
FrescoIoBoundExecutor-1(121150)
java.lang.UnsatisfiedLinkError
๋ก๋ํ DSO๋ฅผ ์ฐพ์ ์ ์์: libimagepipeline.so
1 com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:522)
2 com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:420)(NativeMemoryChunk.java:33)(NativePooledByteBufferOutputStream.java:51)
3 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:370)
4 com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:335)
5 com.facebook.imagepipeline.nativecode.ImagePipelineNativeLoader.load(ImagePipelineNativeLoader.java:42)
6 com.facebook.imagepipeline.memory.NativeMemoryChunk.
7 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:58)
8 com.facebook.imagepipeline.memory.NativeMemoryChunkPool.alloc(NativeMemoryChunkPool.java:20)
9 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
10 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.
11 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:98)
12 com.facebook.imagepipeline.memory.NativePooledByteBufferFactory.newByteBuffer(NativePooledByteBufferFactory.java:26)
13 com.facebook.imagepipeline.cache.BufferedDiskCache.readFromDiskCache(BufferedDiskCache.java:336)
14 com.facebook.imagepipeline.cache.BufferedDiskCache.access$400(BufferedDiskCache.java:36)
15 com.facebook.imagepipeline.cache.BufferedDiskCache$2.call(BufferedDiskCache.java:182)
16 com.facebook.imagepipeline.cache.BufferedDiskCache$2.call(BufferedDiskCache.java:166)
17๋ณผํธ.Task$4.run(Task.java:357)
18 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
19 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
20 com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:53)
21 java.lang.Thread.run(Thread.java:818)