Fresco: ์น˜๋ช…์ ์ธ ์˜ˆ์™ธ: java.lang.UnsatisfiedLinkError ๋กœ๋“œํ•  DSO๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ: libimagepipeline.so / com.facebook.imagepipeline.memory.NativeMemoryChunk

์— ๋งŒ๋“  2018๋…„ 02์›” 11์ผ  ยท  87์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/fresco

์„ค๋ช…

๋ฒ„์ „ 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'
  • ํ”Œ๋žซํผ ๋ฒ„์ „:
    ์˜คํฌ - OS: ์•ˆ๋“œ๋กœ์ด๋“œ 5.1.1
    ์žฅ์น˜: R7sfg / R7g / A51fa
bug enhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฒ„์ „ 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)
3 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
4 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.(NativePooledByteBufferOutputStream.java:51)
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)
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.(NativeMemoryChunk.java:33)
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.(NativePooledByteBufferOutputStream.java:51)
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)

๋ชจ๋“  87 ๋Œ“๊ธ€

๋นŒ๋“œ ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? 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 ์ถœ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @lambdapioneer ์ž…๋‹ˆ๋‹ค .
์„ค๋ช…: ์ด ๋ฒ„๊ทธ๋Š” ํ•ด๋‹น ํŠน์ • ์žฅ์น˜์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” adb logcat ์ถœ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์˜ˆ, OPPO Android 5.1.1 ์žฅ์น˜(R7sfg / R7g / A51fa)์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฒจ๋ถ€ ํŒŒ์ผ์€ logcats์ž…๋‹ˆ๋‹ค
1.txt
2.txt

์•ˆ๋…•ํ•˜์„ธ์š” @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์—์„œ.(์†Œ์ŠคํŒŒ์ผ:33)
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์—์„œ(์†Œ์ŠคํŒŒ์ผ:51)
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)์ž…๋‹ˆ๋‹ค.

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)
3 com.facebook.imagepipeline.memory.BasePool.get(BasePool.java:257)
4 com.facebook.imagepipeline.memory.NativePooledByteBufferOutputStream.(NativePooledByteBufferOutputStream.java:51)
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)
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.(NativeMemoryChunk.java:33)
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.(NativePooledByteBufferOutputStream.java:51)
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์—์„œ.(NativeMemoryChunk.java:33)
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์—์„œ.(NativePooledByteBufferOutputStream.java:51)
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)์—์„œ

image

@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 ์›น์‚ฌ์ดํŠธ ์—์„œ

๋˜ํ•œ ๋‹ค์–‘ํ•œ ์žฅ์น˜์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
image

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'

image

์šฐ๋ฆฌ ์•ฑ(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'

image

์ €๋„ ๊ฐ™์€ ๋ฒ„์ „์ธ 1.13.0์—์„œ ๋งŒ๋‚ฌ๋Š”๋ฐ, arm64 ์ง€์›์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @oprisnik
image

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'

image

์ €๋„ ๊ฐ™์€ ๋ฒ„์ „์ธ 1.13.0์—์„œ ๋งŒ๋‚ฌ๋Š”๋ฐ, arm64 ์ง€์›์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @oprisnik
image

ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์œผ์‹ญ๋‹ˆ๊นŒ?

์œ„์— ์„ค๋ช…๋œ ์†”๋ฃจ์…˜์œผ๋กœ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 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 ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

https://github.com/facebook/fresco/releases/tag/v2.1.0

์ €๋Š” ์ตœ๊ทผ์— Picasso์—์„œ Fresco๋กœ ์ด์‚ฌํ–ˆ๊ณ  Playstore์—์„œ ์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ๋ฐฉ๊ธˆ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ฒซ ๋ฒˆ์งธ ๋‚ ์— ๋‚ด ์•ฑ์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Trend ๊ธฐ๊ธฐ์˜ Android ๋ฒ„์ „ 7.1.2์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Screenshot (158)

ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ž ์žฌ์  ์†”๋ฃจ์…˜:

  • ์ตœ์‹  Fresco ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. SoLoader๋Š” ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ํŠน์ • ์žฅ์น˜์˜ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๊ท€ํ•˜์˜ ์žฅ์น˜ ์„ธํŠธ์— ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  SoLoader์— ๊ธฐ์—ฌํ•˜๋„๋ก ๋„์™€์ฃผ์‹ญ์‹œ์˜ค.
  • SoLoader ๋˜๋Š” ์ž์ฒด ๊ตฌํ˜„ ๋Œ€์‹  ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. https://github.com/facebook/fresco/issues/2049#issuecomment -615255009
  • ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์—†์ด Java ์ „์šฉ Fresco๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค( https://github.com/facebook/fresco/releases/tag/v2.1.0 ์ฐธ์กฐ) (์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Picasso์™€ ๊ฐ€์žฅ ์œ ์‚ฌํ•  ์ˆ˜ ์žˆ์Œ).

@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๊ฐœ ๋”

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰