{"record":{"id":"1326e0b65baa146d","repo":"bumptech/glide","slug":"unable-to-find-glidemodule-implementation","errorCode":null,"errorMessage":"Unable to find GlideModule implementation","messagePattern":"Unable to find GlideModule implementation","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/bumptech/glide/module/ManifestParser.java","lineNumber":81,"sourceCode":"      if (Log.isLoggable(TAG, Log.DEBUG)) {\n        Log.d(TAG, \"Finished loading Glide modules\");\n      }\n    } catch (PackageManager.NameNotFoundException e) {\n      if (Log.isLoggable(TAG, Log.ERROR)) {\n        Log.e(TAG, \"Failed to parse glide modules\", e);\n      }\n    }\n\n    return modules;\n  }\n\n  @SuppressWarnings(\"deprecation\")\n  private static GlideModule parseModule(String className) {\n    Class<?> clazz;\n    try {\n      clazz = Class.forName(className);\n    } catch (ClassNotFoundException e) {\n      throw new IllegalArgumentException(\"Unable to find GlideModule implementation\", e);\n    }\n\n    Object module = null;\n    try {\n      module = clazz.getDeclaredConstructor().newInstance();\n      // These can't be combined until API minimum is 19.\n    } catch (InstantiationException e) {\n      throwInstantiateGlideModuleException(clazz, e);\n    } catch (IllegalAccessException e) {\n      throwInstantiateGlideModuleException(clazz, e);\n    } catch (NoSuchMethodException e) {\n      throwInstantiateGlideModuleException(clazz, e);\n    } catch (InvocationTargetException e) {\n      throwInstantiateGlideModuleException(clazz, e);\n    }\n\n    if (!(module instanceof GlideModule)) {\n      throw new RuntimeException(\"Expected instanceof GlideModule, but found: \" + module);","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/bumptech/glide/blob/eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a/library/src/main/java/com/bumptech/glide/module/ManifestParser.java#L63-L99","documentation":"Thrown by ManifestParser.parseModule when Class.forName(className) raises ClassNotFoundException for a class name declared in AndroidManifest.xml meta-data with value 'GlideModule'. This entire GlideModule/ManifestParser mechanism is deprecated in favor of AppGlideModule/LibraryGlideModule discovered via the @GlideModule annotation and the Glide annotation processor (complier).","triggerScenarios":"An <meta-data android:name=\"...\" android:value=\"GlideModule\"/> entry in AndroidManifest.xml references a class that was renamed, moved, removed, kept in a library that is no longer compiled in, or whose fully-qualified name is misspelled. Also triggered by ProGuard/R8 stripping the module class at release build time.","commonSituations":"Upgrading a Glide 3.x app to 4.x without migrating to annotation-processor modules; release/minified builds where the module class is shrunk; refactoring that changed the package path without updating the manifest; multi-module projects where the manifest references a class from a feature module that isn't packaged.","solutions":["Migrate to the modern API: create a class extending AppGlideModule (and optionally LibraryGlideModule) annotated with @GlideModule, add the Glide annotation processor dependency, and remove the manifest meta-data entry","If staying on the deprecated path, verify the fully-qualified class name in AndroidManifest.xml exactly matches the compiled class","Add a ProGuard/R8 keep rule (-keep public class * implements com.bumptech.glide.module.GlideModule) so the class survives minification","Ensure the library containing the module class is an actual compile dependency of the app module"],"exampleFix":"// before (AndroidManifest.xml)\n<meta-data android:name=\"com.example.MyModule\" android:value=\"GlideModule\"/>\n\n// after - AppGlideModule.kt\n@GlideModule\nclass MyAppGlideModule : AppGlideModule() {\n  override fun registerComponents(context: Context, glide: Glide, registry: Registry) {\n    // custom registration\n  }\n}\n// remove the <meta-data> entry and add annotationProcessor 'com.github.bumptech.glide:compiler:VERSION'","handlingStrategy":"validation","validationCode":"// Before relying on manifest modules, verify the class is loadable on the classpath:\ntry {\n  Class.forName(\"com.example.MyGlideModule\")\n} catch (e: ClassNotFoundException) {\n  // fix the manifest entry or migrate to @GlideModule\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Migrate off manifest-based GlideModule to @GlideModule + annotation processor","Add ProGuard keep rules for any class still referenced in AndroidManifest meta-data","After renames, grep AndroidManifest for 'GlideModule' and update names","Run the app right after library upgrades to catch missing-class regressions"],"tags":["android","glide","manifest","reflection","proguard","deprecated"],"backgroundTag":null,"analyzedSha":"eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a","analyzedAt":"2026-08-14T01:43:54.821Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}