1

When Run the application at Debug Mode Working successfully But when Run with Release Build Getting Below Error :

Fatal Exception: java.lang.NoClassDefFoundError: Failed resolution of: Laa$c;
       at com.marvhong.videoeffect.helper.MagicFilterFactory.filterType2Name + 105(MagicFilterFactory.java:105)
       at com.ui.audiovideoeditor.activity.TrimVideoActivity.initView + 265(TrimVideoActivity.java:265)
       at com.ui.audiovideoeditor.base.TrimmerBaseActivity.onCreate + 78(TrimmerBaseActivity.java:78)
       at android.app.Activity.performCreate + 7032(Activity.java:7032)
       at android.app.Activity.performCreate + 7023(Activity.java:7023)
       at android.app.Instrumentation.callActivityOnCreate + 1236(Instrumentation.java:1236)
       at android.app.ActivityThread.performLaunchActivity + 2814(ActivityThread.java:2814)
       at android.app.ActivityThread.handleLaunchActivity + 2943(ActivityThread.java:2943)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage + 1630(ActivityThread.java:1630)
       at android.os.Handler.dispatchMessage + 106(Handler.java:106)
       at android.os.Looper.loop + 164(Looper.java:164)
       at android.app.ActivityThread.main + 6626(ActivityThread.java:6626)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 438(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main + 811(ZygoteInit.java:811)


Caused by java.lang.ClassNotFoundException: Didn't find class "aa$c" on path: DexPathList[[zip file "/data/app/com.socialmediavideoadsmaker-TZFvA-VXiNm9BBp_hNHgGw==/base.apk"],nativeLibraryDirectories=[/data/app/com.socialmediavideoadsmaker-TZFvA-VXiNm9BBp_hNHgGw==/lib/arm, /data/app/com.socialmediavideoadsmaker-TZFvA-VXiNm9BBp_hNHgGw==/base.apk!/lib/armeabi-v7a, /system/lib, /system/vendor/lib]]
       at dalvik.system.BaseDexClassLoader.findClass + 125(BaseDexClassLoader.java:125)
       at java.lang.ClassLoader.loadClass + 379(ClassLoader.java:379)
       at java.lang.ClassLoader.loadClass + 312(ClassLoader.java:312)
       at com.marvhong.videoeffect.helper.MagicFilterFactory.filterType2Name + 105(MagicFilterFactory.java:105)
       at com.ui.audiovideoeditor.activity.TrimVideoActivity.initView + 265(TrimVideoActivity.java:265)
       at com.ui.audiovideoeditor.base.TrimmerBaseActivity.onCreate + 78(TrimmerBaseActivity.java:78)
       at android.app.Activity.performCreate + 7032(Activity.java:7032)
       at android.app.Activity.performCreate + 7023(Activity.java:7023)
       at android.app.Instrumentation.callActivityOnCreate + 1236(Instrumentation.java:1236)
       at android.app.ActivityThread.performLaunchActivity + 2814(ActivityThread.java:2814)
       at android.app.ActivityThread.handleLaunchActivity + 2943(ActivityThread.java:2943)
       at android.app.ActivityThread.-wrap11(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage + 1630(ActivityThread.java:1630)
       at android.os.Handler.dispatchMessage + 106(Handler.java:106)
       at android.os.Looper.loop + 164(Looper.java:164)
       at android.app.ActivityThread.main + 6626(ActivityThread.java:6626)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 438(RuntimeInit.java:438)
       at com.android.internal.os.ZygoteInit.main + 811(ZygoteInit.java:811)

This Exception arrived from Crshlytics. Video Effect Library i have used and in this Library Below are the Classes that NotFound in Release App:

public class MagicFilterFactory {

    /**
     * 视频滤镜效果
     * @return
     */
    public static GlFilter getFilter() {
        MagicFilterType filterType = ConfigUtils.getInstance().getMagicFilterType();
        return getFilter(filterType);
    }

    private static GlFilter getFilter(MagicFilterType filterType) {
        switch (filterType) {
            case NONE:
                return new GlFilter();
            case BILATERAL:
                return new GlBilateralFilter();
            case BOXBLUR:
                return new GlBoxBlurFilter();
            case BULGEDISTORTION:
                return new GlBulgeDistortionFilter();
            case CGACOLORSPACE:
                return new GlCGAColorspaceFilter();
            case GAUSSIANBLUR:
                return new GlGaussianBlurFilter();
            case GRAYSCALE:
                return new GlGrayScaleFilter();
            case HAZE:
                return new GlHazeFilter(0.5f, 0.3f);
            case INVERT:
                return new GlInvertFilter();
            case LUT:
                return new GlVignetteFilter();
            case MONOCHROME:
                return new GlMonochromeFilter();
            case SEPIA:
                return new SepiaEffect();
            case SHARPEN:
                return new GlSharpenFilter(3.f);
            case SPHEREREFRACTION:
                return new GlSphereRefractionFilter();
            case TONECURVE:
                return new GlToneCurveFilter();
            case VIGNETTE:
                return new GlVignetteFilter(0.5f, 0.5f, 0.2f, 0.85f);
            case BLACKANDWHITE:
                return new BlackAndWhiteEffect();
            case OVERLAY:
                return new OverlayEffect();
            case BARRELBLUR:
                return new BarrelBlurEffect();
            case POSTERIZE:
                return new PosterizeEffect();
            case CONTRAST:
                return new ContrastEffect();
            case GAMMA:
                return new GammaEffect();
            case CROSSPROCESS:
                return new CrossProcessEffect();
            case HUE:
                return new HueEffect();
            case TEMPERATURE:
                return new TemperatureEffect();
            case SKETCH:
                return new SketchEffect();
            default:
                return new GlFilter();
        }
    }

    public static int filterType2Name(MagicFilterType filterType) {
        switch (filterType) {
            case NONE:
                return R.string.filter_none;
            case INVERT:
                return R.string.filter_invert;
            case MONOCHROME:
                return R.string.filter_monochrome;
            case SEPIA:
                return R.string.filter_sepia;
            case GRAYSCALE:
                return R.string.filter_grayscale;
            case SHARPEN:
                return R.string.filter_sharpen;
            case SPHEREREFRACTION:
                return R.string.filter_sphererefraction;
            case BULGEDISTORTION:
                return R.string.filter_bulgedistortion;
            case CGACOLORSPACE:
                return R.string.filter_cgacolorspace;
            case HAZE:
                return R.string.filter_haze;
            case BILATERAL:
                return R.string.filter_bilateral;
            case TONECURVE:
                return R.string.filter_tonecurve;
            case VIGNETTE:
                return R.string.filter_vignette;
            case BLACKANDWHITE:
                return R.string.filter_blackandwhite;
            case OVERLAY:
                return R.string.filter_overlay;
            case BARRELBLUR:
                return R.string.filter_barrelblur;
            case POSTERIZE:
                return R.string.filter_posterize;
            case CONTRAST:
                return R.string.filter_contrast;
            case GAMMA:
                return R.string.filter_gamma;
            case CROSSPROCESS:
                return R.string.filter_crossprocess;
            case HUE:
                return R.string.filter_hue;
            case TEMPERATURE:
                return R.string.filter_temperature;
            case SKETCH:
                return R.string.filter_sketch;
            default:
                return R.string.filter_none;
        }
    }

    public static int filterType2Color(MagicFilterType filterType) {
        switch (filterType) {
            case NONE:
                return R.color.filter_category_greenish_dummy;

            default:
                return R.color.filter_category_greenish_normal;
        }
    }

    public static int filterType2Thumb(MagicFilterType filterType) {
        switch (filterType) {
            case NONE:
                return R.drawable.filter;
            case INVERT:
                return R.drawable.filter_invert;
            case SEPIA:
                return R.drawable.filter_sepia;
            case GRAYSCALE:
                return R.drawable.filter_grayscale;
            case CGACOLORSPACE:
                return R.drawable.filter_cgacolorspace;
            case BARRELBLUR:
                return R.drawable.filter_barrelblur;
            case BLACKANDWHITE:
                return R.drawable.filter_blackandwhite;
            case CONTRAST:
                return R.drawable.filter_contrast;
            case CROSSPROCESS:
                return R.drawable.filter_crossprocess;
            case GAMMA:
                return R.drawable.filter_gamma;
            case HUE:
                return R.drawable.filter_hue;
            case OVERLAY:
                return R.drawable.filter_overlay;
            case TEMPERATURE:
                return R.drawable.filter_temperature;
            default:
                return R.drawable.filter;
        }
    }
}

There is a Class that is not found at release time.

Also, I have applied below solution: 1) Android: java.lang.NoClassDefFoundError on the release APK 2) Android: NoClassDefFoundError only on release build

VIISHRUT MAVANII
  • 11,410
  • 7
  • 34
  • 49
axita.savani
  • 406
  • 1
  • 6
  • 21

1 Answers1

0

minifyEnabled and shrinkResources are very important in your build.gradle file if you want to decrease the size of generated apk for specific build types, ideally the ‘release’ type.

minifyEnabled shrinks code by deleting unused code and references.

shrinkResources on the other hand removes unused resource files from /res folder that are not referenced in the code.

you have to use this code

res = getResources().getIdentifier(filter_none, "string", getPackageName());

instead of

R.string.filter_none

Now, if you refer to a resource dynamically by using the Resources.getIdentifier() the method then since unreferenced resources were removed, unexpected behavior will occur.

So to avoid this, when accessing resource dynamically, use this trick as explained in Android User Guide using this example

String name = String.format("img_%1d", angle + 1);
res = getResources().getIdentifier(name, "drawable", getPackageName());
VIISHRUT MAVANII
  • 11,410
  • 7
  • 34
  • 49