question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Failed resolution of: Landroid/graphics/ColorSpace

See original GitHub issue

Description

It worked fine before I updated my Android Studio to 2020.3.1. I just discovered that android.graphics.ColorSpace was introduced in Android API 26. So all the devices which are under Android 8 will throw this exception. But how could it work so great when I was using Android Studio 4.1.3 to build app bundle?

Reproduction

Use Android Studio to 2020.3.1 and the latest Gradle plugin, build app bundle, run on devices which are using Android 5, 6, 7.

Fatal Exception: java.lang.NoClassDefFoundError
Failed resolution of: Landroid/graphics/ColorSpace;
com.facebook.imageutils.ImageMetaData.getColorSpace (ImageMetaData.java:31)
com.facebook.imagepipeline.image.EncodedImage.readImageMetaData (EncodedImage.java:398)
com.facebook.imagepipeline.image.EncodedImage.internalParseMetaData (EncodedImage.java:363)
com.facebook.imagepipeline.image.EncodedImage.parseMetaData (EncodedImage.java:341)
com.facebook.imagepipeline.producers.NetworkFetchProducer.notifyConsumer (NetworkFetchProducer.java:187)
com.facebook.imagepipeline.producers.NetworkFetchProducer.maybeHandleIntermediateResult (NetworkFetchProducer.java:151)
com.facebook.imagepipeline.producers.NetworkFetchProducer.onResponse (NetworkFetchProducer.java:108)
com.facebook.imagepipeline.producers.NetworkFetchProducer$1.onResponse (NetworkFetchProducer.java:75)
com.facebook.imagepipeline.backends.okhttp3.OkHttpNetworkFetcher$2.onResponse (OkHttpNetworkFetcher.java:185)
okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:504)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1113)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:588)
java.lang.Thread.run (Thread.java:818)

The exception was threw by this method.

private ImageMetaData readImageMetaData() {
    InputStream inputStream = null;
    ImageMetaData metaData = null;
    try {
      inputStream = getInputStream();
      metaData = BitmapUtil.decodeDimensionsAndColorSpace(inputStream);
      mColorSpace = metaData.getColorSpace();
      Pair<Integer, Integer> dimensions = metaData.getDimensions();
      if (dimensions != null) {
        mWidth = dimensions.first;
        mHeight = dimensions.second;
      }
    } finally {
      if (inputStream != null) {
        try {
          inputStream.close();
        } catch (IOException e) {
          // Head in the sand
        }
      }
    }
    return metaData;
  }

But there was already a ColorSpace usage in this method and it did check the API level before using it. This method didn’t throw runtime exception.

public static ImageMetaData decodeDimensionsAndColorSpace(InputStream is) {
    Preconditions.checkNotNull(is);
    ByteBuffer byteBuffer = DECODE_BUFFERS.acquire();
    if (byteBuffer == null) {
      byteBuffer = ByteBuffer.allocate(DECODE_BUFFER_SIZE);
    }
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    try {
      options.inTempStorage = byteBuffer.array();
      BitmapFactory.decodeStream(is, null, options);

      ColorSpace colorSpace = null;
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        colorSpace = options.outColorSpace;
      }
      return new ImageMetaData(options.outWidth, options.outHeight, colorSpace);
    } finally {
      DECODE_BUFFERS.release(byteBuffer);
    }
  }

Here are what I tried.

Gradle clean command.

Build -> Clean project.

Build -> Rebuild project.

Change buildToolsVersion to the latest.

Change androidx.appcompat:appcompat to 2.5.0.

Add multidex-config.txt and multidex-config.pro

But none of these worked.

Solution

Use Android Studio 4.1.3 to build app bundle.

Additional Information

  • Fresco version: 2.5.0
  • Platform version: Android 5, 6, 7, build app bundle by Android 2020.3.1.
  • Gradle plugin: 7.0.3(Android Studio 2020.3.1) failed, 4.1.0(Android Studio 4.1.3) worked

Issue Analytics

  • State:open
  • Created 2 years ago
  • Reactions:9
  • Comments:7

github_iconTop GitHub Comments

11reactions
prakhar-parthcommented, Dec 8, 2021

Put this piece of code in your proguard-rules.pro file :-

-keep public class com.facebook.imageutils.** {
   public *;
}

This will work like a charm.

4reactions
pveghcommented, Jan 27, 2022

Please release a hotfix version with this ASAP. It leads to crashes in production for many users.

Read more comments on GitHub >

github_iconTop Results From Across the Web

android - Failed resolution of: Landroid/graphics/ColorSpace
My team faced the same issue after we migrated our project to Gradle 7. We started to see fatal exceptions (java.lang.NoClassDefFoundError) ...
Read more >
Java.Lang.NoClassDefFoundError: 'Failed resolution of: Ljava ...
Java.Lang.NoClassDefFoundError : 'Failed resolution of: Ljava/awt/Color;'. i use a android native binding library at it was compiled successfully ...
Read more >
ColorSpace - Android Developers
An RGB color space is an additive color space using the RGB color model (a color is therefore represented by a tuple of...
Read more >
Landroid/support/v4/media/app/NotificationCompat$MediaStyle
NoClassDefFoundError : Failed resolution of: ... Intent; import android.graphics. ... Color; import android.net.Uri; import android.os.
Read more >
Failed resolution of: Landroid/support/v7/appcompat/R ...
There are classes in the android-support-v7-appcompat.jar that do. For example: android/support/v7/graphics/drawable/DrawerArrowDrawable android ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found