An image loading and caching library for Android focused on smooth scrolling

Overview

Glide

Maven Central Build Status | View Glide's documentation | 简体中文文档 | Report an issue with Glide

Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.

Glide supports fetching, decoding, and displaying video stills, images, and animated GIFs. Glide includes a flexible API that allows developers to plug in to almost any network stack. By default Glide uses a custom HttpUrlConnection based stack, but also includes utility libraries plug in to Google's Volley project or Square's OkHttp library instead.

Glide's primary focus is on making scrolling any kind of a list of images as smooth and fast as possible, but Glide is also effective for almost any case where you need to fetch, resize, and display a remote image.

Download

For detailed instructions and requirements, see Glide's download and setup docs page.

You can download a jar from GitHub's releases page.

Or use Gradle:

repositories {
  google()
  mavenCentral()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.12.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}

Or Maven:

<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>4.12.0</version>
</dependency>
<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>compiler</artifactId>
  <version>4.12.0</version>
  <optional>true</optional>
</dependency>

For info on using the bleeding edge, see the Snapshots docs page.

ProGuard

Depending on your ProGuard (DexGuard) config and usage, you may need to include the following lines in your proguard.cfg (see the Download and Setup docs page for more details):

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule {
 <init>(...);
}
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {
  *** rewind();
}

# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

How do I use Glide?

Check out the documentation for pages on a variety of topics, and see the javadocs.

For Glide v3, see the wiki.

Simple use cases will look something like this:

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
  ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
}

// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
  final ImageView myImageView;
  if (recycled == null) {
    myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
  } else {
    myImageView = (ImageView) recycled;
  }

  String url = myUrls.get(position);

  Glide
    .with(myFragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_spinner)
    .into(myImageView);

  return myImageView;
}

Status

Version 4 is now released and stable. Updates are released periodically with new features and bug fixes.

Comments/bugs/questions/pull requests are always welcome! Please read CONTRIBUTING.md on how to report issues.

Compatibility

  • Minimum Android SDK: Glide v4 requires a minimum API level of 14.
  • Compile Android SDK: Glide v4 requires you to compile against API 26 or later.

If you need to support older versions of Android, consider staying on Glide v3, which works on API 10, but is not actively maintained.

  • OkHttp 3.x: There is an optional dependency available called okhttp3-integration, see the docs page.
  • Volley: There is an optional dependency available called volley-integration, see the docs page.
  • Round Pictures: CircleImageView/CircularImageView/RoundedImageView are known to have issues with TransitionDrawable (.crossFade() with .thumbnail() or .placeholder()) and animated GIFs, use a BitmapTransformation (.circleCrop() will be available in v4) or .dontAnimate() to fix the issue.
  • Huge Images (maps, comic strips): Glide can load huge images by downsampling them, but does not support zooming and panning ImageViews as they require special resource optimizations (such as tiling) to work without OutOfMemoryErrors.

Build

Building Glide with gradle is fairly straight forward:

git clone https://github.com/bumptech/glide.git
cd glide
./gradlew jar

Note: Make sure your Android SDK has the Android Support Repository installed, and that your $ANDROID_HOME environment variable is pointing at the SDK or add a local.properties file in the root project with a sdk.dir=... line.

Samples

Follow the steps in the Build section to set up the project and then:

./gradlew :samples:flickr:run
./gradlew :samples:giphy:run
./gradlew :samples:svg:run
./gradlew :samples:contacturi:run

You may also find precompiled APKs on the releases page.

Development

Follow the steps in the Build section to setup the project and then edit the files however you wish. Android Studio cleanly imports both Glide's source and tests and is the recommended way to work with Glide.

To open the project in Android Studio:

  1. Go to File menu or the Welcome Screen
  2. Click on Open...
  3. Navigate to Glide's root directory.
  4. Select setting.gradle

For more details, see the Contributing docs page.

Getting Help

To report a specific problem or feature request, open a new issue on Github. For questions, suggestions, or anything else, email Glide's discussion group, or join our IRC channel: irc.freenode.net#glide-library.

Contributing

Before submitting pull requests, contributors must sign Google's individual contributor license agreement.

Thanks

Author

Sam Judd - @sjudd on GitHub, @samajudd on Twitter

License

BSD, part MIT and Apache 2.0. See the LICENSE file for details.

Disclaimer

This is not an official Google product.

Comments
  • Glide trying to load from assets directory instead of internet

    Glide trying to load from assets directory instead of internet

    Integration libraries: using Glide version: 4.6.1 using com.github.bumptech.glide:okhttp3-integration:4.6.1

    Device/Android Version: Samsung S6 Android version 24

    Issue details / Repro steps / Use case background: I am trying to load an image from Internet into ImageView but it seems like Glide is trying to load from assets directory instead of Internet.

      //this is the ApplicationContext
      RequestManager requestManager = Glide.with(this)
                    .applyDefaultRequestOptions(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
                    .applyDefaultRequestOptions(RequestOptions.placeholderOf(R.drawable.placeholder));
                requestManager
                        .applyDefaultRequestOptions(RequestOptions.skipMemoryCacheOf(true));
            }
            requestManager.load("http://opendata.toronto.ca/transportation/tmc/rescucameraimages/CameraImages/loc8015.jpg")
                    .into(image);
    
    

    Layout XML:

    <ImageView
                android:id="@+id/cam_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center"
                android:gravity="center"
                android:scaleType="fitCenter"
                />
    

    Stack trace / LogCat:

    Root cause (1 of 1)
      java.io.FileNotFoundException: No content provider:  http://opendata.toronto.ca/transportation/tmc/rescucameraimages/CameraImages/loc8015.jpg 
          at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1049)
          at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:904)
          at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:831)
          at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:22)
          at com.bumptech.glide.load.data.AssetFileDescriptorLocalUriFetcher.loadResource(AssetFileDescriptorLocalUriFetcher.java:13)
          at com.bumptech.glide.load.data.LocalUriFetcher.loadData(LocalUriFetcher.java:44)
          at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:62)
          at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:299)
          at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:266)
          at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:230)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
          at java.lang.Thread.run(Thread.java:841)
          at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:446)
    
    bug repro-needed 
    opened by weejim76 72
  • Share image in cache

    Share image in cache

    I have a question in regarding sharing an image via Intent Share API which was already downloaded in cache(or not in the worst case scenario). Do you have any suggestions regarding this? Would it work with the FileProvider class in the support lib? The current implementation now loads the URL in a custom target, writes the bitmap into a common file(share.jpeg) and shares that one with a custom ContentProvider. Works so far but it feels like extra unnecessary work which makes the user wait for a while for an image which is already there.

    question 
    opened by TepesLucian 56
  • NPE: 'int com.bumptech.glide.gifdecoder.GifHeader.frameCount'

    NPE: 'int com.bumptech.glide.gifdecoder.GifHeader.frameCount'

    glide:4.0.0-SNAPSHOT It's neither device nor Android version specific. I can't reproduce it, but it doesn't seem rare when looking at crash numbers. In this case it happened when returning from Activity A to Activity B and Activity B contains the animation. It possible that the ImageViews visibility state is changed shortly after returning to Activity B.

     public void setState(State state) {
            mState = state;
            if (state == State.WORKING) {
                setVisibility(VISIBLE);
                mIntroContainer.setVisibility(GONE);
                mEmptyContainer.setVisibility(GONE);
                mWorkingContainer.setVisibility(VISIBLE); //  android:id="@+id/working_overlay"
                Glide.with(getContext())
                        .load(COFFEE_ANIM_ASSET)
                        .apply(RequestOptions.formatOf(DecodeFormat.PREFER_RGB_565))
                        .apply(RequestOptions.placeholderOf(R.drawable.sdmanimation))
                        .into(mWorkingAnimation); // android:id="@+id/iv_working_animation"
            } else {
                Glide.with(getContext()).clear(mWorkingAnimation);
                mWorkingContainer.setVisibility(GONE);
                if (state == State.INTRO) {
                    setVisibility(VISIBLE);
                    mEmptyContainer.setVisibility(GONE);
                    mIntroContainer.setVisibility(VISIBLE);
                } else if (state == State.NORESULTS) {
                    setVisibility(VISIBLE);
                    mIntroContainer.setVisibility(GONE);
                    mEmptyContainer.setVisibility(VISIBLE);
                } else if (state == State.GONE) {
                    setVisibility(GONE);
                    mIntroContainer.setVisibility(GONE);
                    mEmptyContainer.setVisibility(GONE);
                }
            }
        }
    
        <LinearLayout
            android:id="@+id/working_overlay"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="16dp"
            android:visibility="gone"
            tools:visibility="visible">
    
            <ImageView
                android:id="@+id/iv_working_animation"
                android:layout_width="200dp"
                android:layout_height="200dp"
                android:padding="5dp"
                android:src="@drawable/sdmanimation"/>
        </LinearLayout>
    
    Caused by: java.lang.NullPointerException: Attempt to read from field 'int com.bumptech.glide.gifdecoder.GifHeader.frameCount' on a null object reference
    at com.bumptech.glide.gifdecoder.GifDecoder.getFrameCount(GifDecoder.java:262)
    at com.bumptech.glide.load.resource.gif.GifFrameLoader.getFrameCount(GifFrameLoader.java:139)
    at com.bumptech.glide.load.resource.gif.GifDrawable.startRunning(GifDrawable.java:166)
    at com.bumptech.glide.load.resource.gif.GifDrawable.start(GifDrawable.java:154)
    at com.bumptech.glide.request.target.ImageViewTarget.onStart(ImageViewTarget.java:102)
    at com.bumptech.glide.manager.TargetTracker.onStart(TargetTracker.java:31)
    at com.bumptech.glide.RequestManager.onStart(RequestManager.java:245)
    at com.bumptech.glide.manager.ActivityFragmentLifecycle.onStart(ActivityFragmentLifecycle.java:51)
    at com.bumptech.glide.manager.SupportRequestManagerFragment.onStart(SupportRequestManagerFragment.java:175)
    at android.support.v4.app.Fragment.performStart(Fragment.java:1986)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1102)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)
    at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:2047)
    at android.support.v4.app.FragmentController.dispatchStart(FragmentController.java:176)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:553)
    at eu.thedarken.sdm.SDMServiceActivity.onStart(SDMServiceActivity.java:79)
    at eu.thedarken.sdm.SDMMainActivity.onStart(SDMMainActivity.java:155)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
    at android.app.Activity.performStart(Activity.java:6006)
    at android.app.Activity.performRestart(Activity.java:6063)
    at android.app.Activity.performResume(Activity.java:6068)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2975)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1347) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    
    bug v4 
    opened by d4rken 51
  • Questions about recycling

    Questions about recycling

    Me again :)

    Got some questions about when images are recycled and how internals works, since I get way more java.lang.RuntimeException: Canvas: trying to use a recycled bitmap than before switching to Glide.

    Since I can't reproduce it's hard to find the cause.

    Numbers are not very high (5000 crash on more than 7 000 000 screen views per week glide 3.6.0) but high enough for me to investigate.

    Most calls are basics :

    Glide.with(ctx)
         .load(xxx)
         .centerCrop()
         .animate(R.anim.abc_fade_in)
         .error(R.drawable.default_thumb_fanart_misc)
         .into(mViewFanart);
    
    

    Context is sometimes application context to simplify reused code, is there impact of not using fragment / activities ?

    The only other call that could trigger is:

    .into(new SimpleTarget<Bitmap>() {
        @Override
        public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
            if (isAdded() && mViewThumb != null) {
                mViewThumb.setImageBitmap(bitmap);
            }
        }
    
        @Override
        public void onLoadFailed(Exception e, Drawable errorDrawable) {
            if (isAdded() && mViewThumb != null) {
                mViewThumb.setImageDrawable(errorDrawable);
            }
        }
    
        @Override
        public void onLoadCleared(Drawable placeholder) {
            super.onLoadCleared(placeholder);
            try {
                mViewThumb.setImageResource(R.drawable.default_thumb_big);
            } catch (Exception ignore) {
            }
        }
    });
    

    But from my understanding of the docs the onLoadCleared that I use should cover this problem.

    Any advice / tips on how / what to check to find the root cause ?

    question stale 
    opened by Tolriq 51
  • Predefined item height before image arrives

    Predefined item height before image arrives

    How should i set up Glide and my xml for each item if i all ready know the heights of images. Until know i set my ImageView to wrap_content

    <ImageView
        android:id="@+id/item_image_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:contentDescription="@string/img_content"
        android:scaleType="fitXY"/>
    

    That works fine but as soon as image arrives it stretches the placeholder and the scrolling jumps giving an awful experience to user

    question 
    opened by AngleV 49
  • Crash when activity is destroyed

    Crash when activity is destroyed

    TLDR; Glide should just log and cancel the load instead of crashing when the activity is destoryed since there is no point in loading anything. The user of the library shouldn't have to explicitly handle this situation.


    Glide Version/Integration library (if any): 'com.github.bumptech.glide:glide:3.6.1' Device/Android Version: Any/Android 5.0+ Issue details/Repro steps/Use case background:

    This issue is related to issue #138. When making a call on glide if the activity has been destroyed it will throw an IllegalArgumentException. The following code in the RequestManagerRetriever.java class is responsible:

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    private static void assertNotDestroyed(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed()) {
            throw new IllegalArgumentException("You cannot start a load for a destroyed activity");
        }
    }
    

    This is causing a crash in my crashlytics console for a small percentage of my users. There is likely some kind of timing issue where the user hits home as they are scrolling a big list and the activity is cleaned up which results in this crash. I could fix this issue by wrapping glide and running this code myself and simply not calling glide in this situation. However I believe this is the wrong approach, the library shouldn't be crashing in this situation and instead should log and do nothing.

    If the activity is destroyed then the view that is being displayed which the image is being displayed is not visible and as a result no exception should be thrown. Instead glide should log and simply not show the image. Users of the library should not have to explicitly handle situations like these, it makes more sense to just handle it in the library.

    Glide load line:

    Glide.with(context).load(url).bitmapTransform(new GrayscaleTransformation(getContext())).into(imageView);
    

    Layout XML: not relevant

    Stack trace / LogCat:

    Fatal Exception: java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
           at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:134)
           at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:102)
           at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:87)
           at com.bumptech.glide.Glide.with(Glide.java:620)
           at com.myapp.myapp$24.run(MyAppClass.java:977)
           at android.os.Handler.handleCallback(Handler.java:739)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:135)
           at android.app.ActivityThread.main(ActivityThread.java:5431)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
    
    wontfix 
    opened by michaelrhughes 49
  • cannot resolve symbol 'GlideApp' (GlideApp was not generated)

    cannot resolve symbol 'GlideApp' (GlideApp was not generated)

    I'm using 4.0.0-RC0, I added it by Gradle:

    repositories {  mavenCentral() // jcenter() works as well because it pulls from Maven Central } dependencies {  compile 'com.android.support:appcompat-v7:25.3.1'  compile 'com.github.bumptech.glide:glide:4.0.0-RC0'  compile 'com.android.support:support-v4:25.3.1'  annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0' }

    I followed the here: https://github.com/bumptech/glide/tree/master/samples/svg/src/main/java/com/bumptech/glide/samples/svg But when i try load SVG file to ImageView, i get error message: cannot resolve symbol 'GlideApp' I think GlideApp class was not generated. My source:

    package com.example.quangson.glidesvg; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; import android.graphics.drawable.PictureDrawable; import android.net.Uri; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.RequestBuilder; import com.caverock.androidsvg.SVGImageView; import com.example.quangson.glidesvg.glide.SvgSoftwareLayerSetter; public class MainActivity extends AppCompatActivity {  private static final String TAG = "SVGActivity";  private ImageView imageViewRes;  private ImageView imageViewNet;  private RequestBuilder requestBuilder;  @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   imageViewRes = (ImageView) findViewById(R.id.svg_image_view1);   imageViewNet = (ImageView) findViewById(R.id.svg_image_view2);   requestBuilder = GlideApp.with(this)     .as(PictureDrawable.class)     .placeholder(R.drawable.image_loading)     .error(R.drawable.image_error)     .transition(withCrossFade())     .listener(new SvgSoftwareLayerSetter());   Uri uri = Uri.parse("http://www.clker.com/cliparts/u/Z/2/b/a/6/android-toy-h.svg");   requestBuilder.load(uri).into(imageViewNet);  } }

    How to generate GlideApp class? Please help

    opened by sonzerolee 45
  • Removed synthetic methods

    Removed synthetic methods

    Description

    This removes all the synthetic methods. Issue #1555

    Motivation and Context

    This change helps us reduce the method count and therefore also helps us avoid the trampoline created because of synthetic methods.

    enhancement non-library v4 
    opened by RiteshChandnani 45
  • Some images simply do not download (Black image) - Android

    Some images simply do not download (Black image) - Android

    Hi, In some devices (Moto X) do not download correctly, like the screenshot attached. When i skipMemoryCache(true) it works, because Glide download the image again. I already use asBitmap() with imageDecoder() and the problem still occur.

    But, in my other device (Nexus 4) this problem doesn't occur. Glide works perfectly

    I tried to config listener() to log Exceptions but never called onException() method. In other words, no Exceptions occurs. Its weird.

    Best, Thiago Luis.

    screenshot_2015-11-12-16-45-43

    bug enhancement 
    opened by thiagoluis88 44
  • Wrong images being loaded in Recycler View's grid on Some devices

    Wrong images being loaded in Recycler View's grid on Some devices

    In my app, I have a Recycler view with GridLayoutManager. The code I am using to load images bindImage method of recycler view adapter:

    @Override
    public void onBindViewHolder(ImageViewHolder holder, int position) {
        GSImage dbImage = mLandscapeImagesList.get(position);
        File imageFile = new File(mImageDirectoryFile, dbImage.getImageName());
    
        Glide.with(MyImageFragement.this).load(imageFile).centerCrop().into(holder.imageView);
    
        int indexInSelectedImagesSet = mSelectedLandscapeImages.indexOf(dbImage);
        if (indexInSelectedImagesSet>-1){
            holder.itemView.setSelected(true);
        } else {
            holder.itemView.setSelected(false);
        }
    
    }
    

    The Cell layout I am using is:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:background="@drawable/images_background"
          android:layout_marginTop="9dp"
          android:layout_marginLeft="10dp"
          android:layout_marginRight="0dp"
          android:layout_marginBottom="0dp"
          android:padding="2dp">
    
          <com.gaurav.myProject.commons.AspectRatioImageView
                     android:id="@+id/image_thumb"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:scaleType="fitXY"
                     app:viewAspectRatio="1.33"/>
    
    </RelativeLayout>
    

    Here AspectRatioImageView(subclass of ImageView) automatically resizes the height of image view according to the provided aspect ratio.

    The above code is working fine on my devices (Xiaomi MiPad, ViewSonic Tablet, Android emaulators and Samsung Galaxy S3) but is not working correctly on my client's device (Samsung 10.1 inch tablet). In his end, images are being duplicated in the recycler grid. Also the the duplicates mostly occurs in adjacent recycler grid positions. I can't share any code as I even unable to reproduce the issue on my devices.

    Do you guys have any idea what could the cause of this? Can you please suggest me any thing that I can try?

    Thanks

    question stale 
    opened by gauravlnx 43
  •  Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 14281 (glide-disk-cach)

    Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 14281 (glide-disk-cach)

    I call the glide method in the viewpage + fragment.Then when I change the viewpage states or click the fragment into the detail activity,the app would crash.The faster I changed,the faster the APP crashes. Why do you report this crash? Is it related to disk cache?

    Recently, we found many times throw this exception

    --------- beginning of crash 11-20 15:28:46.368 22100 14281 F google-breakpad: Microdump skipped (uninteresting) 11-20 15:28:46.417 13699 14281 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 14281 (glide-disk-cach) 11-20 15:28:46.596 22106 22106 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 11-20 15:28:46.597 22106 22106 F DEBUG : Build fingerprint: 'HUAWEI/MHA-AL00/HWMHA:7.0/HUAWEIMHA-AL00/C00B231:user/release-keys' 11-20 15:28:46.597 22106 22106 F DEBUG : Revision: '0' 11-20 15:28:46.597 22106 22106 F DEBUG : ABI: 'arm' 11-20 15:28:46.597 22106 22106 F DEBUG : pid: 13699, tid: 14281, name: glide-disk-cach >>> com.smartvideo.phone <<< 11-20 15:28:46.597 22106 22106 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4 11-20 15:28:46.597 22106 22106 F DEBUG : r0 00000004 r1 cc3f9060 r2 c86d55e0 r3 cc3f8fa4 11-20 15:28:46.597 22106 22106 F DEBUG : r4 cc3f9044 r5 cc3f9050 r6 c86d55e0 r7 cc3f96bc 11-20 15:28:46.597 22106 22106 F DEBUG : r8 00000000 r9 00000000 sl cc3f95b4 fp cc3f8fa0 11-20 15:28:46.597 22106 22106 F DEBUG : ip ee19f15c sp cc3f8d78 lr edf1202d pc edf0f9b2 cpsr 000a0030 11-20 15:28:46.607 22106 22106 F DEBUG : 11-20 15:28:46.607 22106 22106 F DEBUG : backtrace: 11-20 15:28:46.607 22106 22106 F DEBUG : #00 pc 001309b2 /vendor/lib/libskia.so (_ZN15SkShaderBlitterC1ERK8SkPixmapRK7SkPaintPN8SkShader7ContextE+61) 11-20 15:28:46.608 22106 22106 F DEBUG : #1 pc 00133029 /vendor/lib/libskia.so (_ZN23SkARGB32_Shader_BlitterC2ERK8SkPixmapRK7SkPaintPN8SkShader7ContextE+24) 11-20 15:28:46.608 22106 22106 F DEBUG : #2 pc 001308f7 /vendor/lib/libskia.so 11-20 15:28:46.608 22106 22106 F DEBUG : #3 pc 00130729 /vendor/lib/libskia.so (_ZN9SkBlitter6ChooseERK8SkPixmapRK8SkMatrixRK7SkPaintP16SkSmallAllocatorILj3ELj1500EEb+936) 11-20 15:28:46.608 22106 22106 F DEBUG : #4 pc 001462cb /vendor/lib/libskia.so 11-20 15:28:46.608 22106 22106 F DEBUG : #5 pc 0014720f /vendor/lib/libskia.so (ZNK6SkDraw8drawRectERK6SkRectRK7SkPaintPK8SkMatrixPS1+606) 11-20 15:28:46.608 22106 22106 F DEBUG : #6 pc 00128461 /vendor/lib/libskia.so (_ZN14SkBitmapDevice8drawRectERK6SkDrawRK6SkRectRK7SkPaint+22) 11-20 15:28:46.608 22106 22106 F DEBUG : #7 pc 00139ff5 /vendor/lib/libskia.so (_ZN8SkCanvas10onDrawRectERK6SkRectRK7SkPaint+336) 11-20 15:28:46.608 22106 22106 F DEBUG : #8 pc 0013cc0b /vendor/lib/libskia.so (_ZN8SkCanvas14drawRectCoordsEffffRK7SkPaint+162) 11-20 15:28:46.608 22106 22106 F DEBUG : #9 pc 7449d123 /data/dalvik-cache/arm/system@[email protected] (offset 0x17b3000)

    stale needs triage 
    opened by JwyinKevin 41
  • Cannot compile Glide with Java 17 on Gradle

    Cannot compile Glide with Java 17 on Gradle

    Glide Version: 4.14.2

    Integration libraries: recyclerview:4.14.2, okhttp:4.14.2, volley:4.14.2

    Device/Android Version: N/A

    Issue details / Repro steps / Use case background: I just updated to Gradle 8 RC1 / Java 17 and saw this error. Then I re-tested gradlew assemble lint --no-build-cache --rerun-tasks -S Gradle 7.6 / Java 17: fails Gradle 7.6 / Java 11: ok Gradle 8 RC1 / Java 17: fails Gradle 8 RC1 / Java 11: ok

    Note: this issue will become very relevant in a few months, when AGP will en-masse force Java 17 on everyone.

    Looks like this has been an issue in the past, but no action was taken on the Gradle side, not sure if it's a Gradle issue in general, but linking for reference: https://github.com/gradle/gradle/issues/16641

    Based on https://github.com/projectlombok/lombok/issues/2681#issuecomment-748616687 it's not going to be an easy ride.

    Any pointers or ideas welcome to use Glide on Java 17.

    Repro

    • https://github.com/TWiStErRob/glide-support/commit/c8e13db3030c6f2cfa6313168f7d4e3a8ba67943
    • set JAVA_HOME to 17
    • gradlew assemble lint --no-build-cache --rerun-tasks -S

    Glide load line / GlideModule (if any) / list Adapter code (if any):

    N/A
    

    Layout XML:

    N/A
    

    Stack trace / LogCat:

    https://github.com/bumptech/glide/blob/4affb8d2d9f4ca15c7953ca7322c52fb1e2dab1b/annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/ProcessorUtil.java#L560-L568

    Caused by: java.lang.IllegalAccessError:
    class com.bumptech.glide.annotation.compiler.ProcessorUtil (in unnamed module @0x6438da4c)
    cannot access class com.sun.tools.javac.code.Attribute$UnresolvedClass (in module jdk.compiler)
    because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x6438da4c
            at com.bumptech.glide.annotation.compiler.ProcessorUtil.findClassValuesFromAnnotationOnClassAsNames(ProcessorUtil.java:561)
    > Task :compileGlide4DebugJavaWithJavac FAILED
    P:\projects\contrib\github-glide-support\src\glide4\java\com\bumptech\glide\supportapp\github\_2000_apt_glide_app\TestFragment.java:8: error: cannot find symbol
    import com.bumptech.glide.supportapp.GlideApp;
                                        ^
      symbol:   class GlideApp
      location: package com.bumptech.glide.supportapp
    1 error
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':compileGlide4DebugJavaWithJavac'.
    > java.lang.IllegalAccessError: class com.bumptech.glide.annotation.compiler.ProcessorUtil (in unnamed module @0x6438da4c) cannot access class com.sun.tools.javac.code.Attribute$UnresolvedClass (in module jdk.compil
    er) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x6438da4c
    
    * Try:
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    
    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileGlide4DebugJavaWithJavac'.
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:149)
            at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:147)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:135)
            at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
            at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:338)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: java.lang.RuntimeException: java.lang.IllegalAccessError: class com.bumptech.glide.annotation.compiler.ProcessorUtil (in unnamed module @0x6438da4c) cannot access class com.sun.tools.javac.code.Attribute$
    UnresolvedClass (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x6438da4c
            at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:168)
            at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
            at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
            at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89)
            at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
            at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
            at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:56)
            at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:41)
            at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:98)
            at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)
            at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
            at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
            at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
            at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)
            at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)
            at org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler.execute(DefaultToolchainJavaCompiler.java:57)
            at org.gradle.api.tasks.compile.JavaCompile.lambda$createToolchainCompiler$3(JavaCompile.java:203)
            at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53)
            at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:52)
            at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:70)
            at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:44)
            at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:66)
            at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:52)
            at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
            at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
            at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:221)
            at org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:162)
            at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:147)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:568)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
            at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:45)
            at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
            at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.execute(IncrementalTaskAction.java:26)
            at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
            at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
            at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
            at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:166)
            at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:93)
            at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)
            at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:57)
            at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:54)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:54)
            at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
            at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67)
            at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37)
            at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
            at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
            at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
            at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
            at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:28)
            at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.executeDelegateBroadcastingChanges(CaptureStateAfterExecutionStep.java:100)
            at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:72)
            at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:50)
            at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40)
            at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29)
            at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:166)
            at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:70)
            at org.gradle.internal.Either$Right.fold(Either.java:175)
            at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
            at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:68)
            at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:46)
            at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
            at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
            at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
            at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:91)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:55)
            at java.base/java.util.Optional.orElseGet(Optional.java:364)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
            at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:37)
            at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65)
            at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
            at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:76)
            at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:37)
            at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:94)
            at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:49)
            at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:71)
            at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:45)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNonEmptySources(SkipEmptyWorkStep.java:177)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
            at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:53)
            at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
            at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
            at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
            at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)
            at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)
            at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:75)
            at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:41)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:32)
            at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
            at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:21)
            at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
            at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
            at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:42)
            at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:31)
            at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:64)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:146)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:135)
            at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
            at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
            at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:57)
            at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
            at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
            at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
            at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
            at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
            at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:338)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:325)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:318)
            at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:304)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
            at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
            at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
            at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
            at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: java.lang.IllegalAccessError: class com.bumptech.glide.annotation.compiler.ProcessorUtil (in unnamed module @0x6438da4c) cannot access class com.sun.tools.javac.code.Attribute$UnresolvedClass (in module j
    dk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x6438da4c
            at com.bumptech.glide.annotation.compiler.ProcessorUtil.findClassValuesFromAnnotationOnClassAsNames(ProcessorUtil.java:561)
            at com.bumptech.glide.annotation.compiler.AppModuleGenerator.getExcludedGlideModuleClassNames(AppModuleGenerator.java:322)
            at com.bumptech.glide.annotation.compiler.AppModuleGenerator.generate(AppModuleGenerator.java:99)
            at com.bumptech.glide.annotation.compiler.AppModuleProcessor.maybeWriteAppModule(AppModuleProcessor.java:112)
            at com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor.process(GlideAnnotationProcessor.java:124)
            at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.process(DelegatingProcessor.java:62)
            at org.gradle.api.internal.tasks.compile.processing.AggregatingProcessor.process(AggregatingProcessor.java:50)
            at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.process(DelegatingProcessor.java:62)
            at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.access$401(TimeTrackingProcessor.java:37)
            at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$5.create(TimeTrackingProcessor.java:99)
            at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor$5.create(TimeTrackingProcessor.java:96)
            at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.track(TimeTrackingProcessor.java:117)
            at org.gradle.api.internal.tasks.compile.processing.TimeTrackingProcessor.process(TimeTrackingProcessor.java:96)
            at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1023)
            at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:939)
            at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1267)
            at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1382)
            at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1234)
            at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:916)
            at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
            at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
            ... 159 more
    
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 11s
    50 actionable tasks: 50 executed
    
    opened by TWiStErRob 1
  • NullPointerException

    NullPointerException

    Glide Version: Glide 4.14.2

    Integration libraries: OkHttp3

    Device/Android Version:vivo/FUNTOUCH Android 11

    Issue details / Repro steps / Use case background:

    Glide load line / GlideModule (if any) / list Adapter code (if any):

    Glide.with...    Glide.with(context).load(picPath).apply(
                        RequestOptions.bitmapTransform(
                            BlurTransformation(context, 25f)
                        )
                    ).into(imageView)
    

    Layout XML:

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="211dp"
            android:background="#dddddd">
            <ImageView
                android:id="@+id/ivBzdBgImg"
                android:layout_width="match_parent"
                android:scaleType="centerCrop"
                android:background="#33000000"
                android:layout_centerInParent="true"
                android:layout_height="match_parent"/>
    
            <ImageView
                android:id="@+id/ivBzdImg"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginHorizontal="20dp"
                android:layout_centerInParent="true"
                android:scaleType="centerCrop"
                android:src="@mipmap/img_nor" />
    
            <TextView
                android:id="@+id/tvImgCover"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="8dp"
                android:background="@drawable/bg_cover"
                android:paddingHorizontal="6dp"
                android:paddingVertical="3dp"
                android:text="封面"
                android:textColor="@color/primaryTextColor"
                android:textSize="14sp" />
    
        </RelativeLayout>
    

    Stack trace / LogCat: Argument must not be null

    com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:29)

    paste stack trace and/or log here
    
    opened by ZhangHaoChase 0
  • Glide load webp failed when set RequestOptions or transform

    Glide load webp failed when set RequestOptions or transform

    I tried to load a webp image,and set round cornor or set centerCrop,but all load failed.

    These below are my code:

    Glide.with(this)
                .load("https://mathiasbynens.be/demo/animated-webp-supported.webp")
                .apply(RequestOptions().transform(CenterCrop(), RoundedCorners(20)))
                .into(imageView)
    

    or

    Glide.with(this)
                .load("https://mathiasbynens.be/demo/animated-webp-supported.webp")
                .centerCrop()
                .into(imageView)
    

    Has any way to resolve them?

    opened by haoyd 0
  • Deprecate .theme()

    Deprecate .theme()

    We should now be able to pull the correct theme from the Context from the associated RequestManager, which makes this method largely not useful.

    The only exception would be an attempt to do a themed loading using the Application Context where a theme of some Fragment or Activity is available. I assume that case is relatively rare and it's probably better to just do the load with the Fragment or Activity Context anyway.

    import-ready 
    opened by sjudd 0
Releases(v4.14.2)
A powerful image downloading and caching library for Android

Picasso A powerful image downloading and caching library for Android For more information please see the website Download Download the latest AAR from

Square 18.4k Jan 6, 2023
🍂 Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

?? Jetpack Compose image loading library which can fetch and display network images using Glide, Coil, and Fresco.

Jaewoong Eum 1.4k Jan 2, 2023
Library to handle asynchronous image loading on Android.

WebImageLoader WebImageLoader is a library designed to take to hassle out of handling images on the web. It has the following features: Images are dow

Alexander Blom 102 Dec 22, 2022
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
Image loading for Android backed by Kotlin Coroutines.

An image loading library for Android backed by Kotlin Coroutines. Coil is: Fast: Coil performs a number of optimizations including memory and disk cac

Coil 8.8k Jan 8, 2023
An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Scrolling Image View An Android view for displaying repeated continuous side scrolling images. This can be used to create a parallax animation effect.

Q42 1.8k Dec 27, 2022
An Android transformation library providing a variety of image transformations for Glide.

Glide Transformations An Android transformation library providing a variety of image transformations for Glide. Please feel free to use this. Are you

Daichi Furiya 9.7k Dec 30, 2022
An android image compression library.

Compressor Compressor is a lightweight and powerful android image compression library. Compressor will allow you to compress large photos into smaller

Zetra 6.7k Jan 9, 2023
An Android transformation library providing a variety of image transformations for Picasso

Picasso Transformations An Android transformation library providing a variety of image transformations for Picasso. Please feel free to use this. Are

Daichi Furiya 1.7k Jan 5, 2023
Compose Image library for Kotlin Multiplatform.

Compose ImageLoader Compose Image library for Kotlin Multiplatform. Setup Add the dependency in your common module's commonMain sourceSet kotlin {

Seiko 45 Dec 29, 2022
load-the-image Apply to compose-jb(desktop), Used to load network and local pictures.

load-the-image load-the-image Apply to compose-jb(desktop), Used to load network and local pictures. ?? Under construction It may change incompatibly

lt_taozi 13 Dec 29, 2022
Image Picker for Android 🤖

Image Picker for Android ??

Esa Firman 1k Dec 31, 2022
Luban(鲁班)—Image compression with efficiency very close to WeChat Moments/可能是最接近微信朋友圈的图片压缩算法

Luban ?? English Documentation Luban(鲁班) —— Android图片压缩工具,仿微信朋友圈压缩策略。 Luban-turbo —— 鲁班项目的turbo版本,查看trubo分支。 写在前面 家境贫寒,工作繁忙。只能不定期更新,还望网友们见谅! 项目描述 目前做A

郑梓斌 13.1k Jan 7, 2023
ZoomableComposeImage - A zoomable image for jetpack compose

ZoomableComposeImage - A zoomable image for jetpack compose

RERERE 10 Dec 11, 2022
ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image

compose-image-blurhash ComposeImageBlurhash is a Jetpack Compose component with the necessary implementation to display a blurred image while the real

Orlando Novas Rodriguez 24 Nov 18, 2022
Easy to use, lightweight custom image view with rounded corners.

RoundedImageView Easy to use, lightweight custom image view with rounded corners. Explore the docs » View Demo · Report Bug · Request Feature About Th

Melik Mehmet Özyildirim 6 Dec 23, 2021
An Android library for managing images and the memory they use.

Fresco Fresco is a powerful system for displaying images in Android applications. Fresco takes care of image loading and display, so you don't have to

Facebook 16.9k Jan 8, 2023
Photo picker library for android. Let's you pick photos directly from files, or navigate to camera or gallery.

ChiliPhotoPicker Made with ❤️ by Chili Labs. Library made without DataBinding, RxJava and image loading libraries, to give you opportunity to use it w

Chili Labs 394 Jan 2, 2023
Glide Bitmap Pool is a memory management library for reusing the bitmap memory

Glide Bitmap Pool About Glide Bitmap Pool Glide Bitmap Pool is a memory management library for reusing the bitmap memory. As it reuses bitmap memory ,

AMIT SHEKHAR 573 Dec 31, 2022