Android App crashes in the release build due to NullPointerException when setting minifyEnabled to true and shrinkResources to true

353 Views Asked by At

when setting minifyEnabled to true causes nullpointerException when I set minifyEnabled to false the problem gone

but I want to set minifyEnabled to true and shrinkResources to true to keep my app size small and delete unused classes

also try to use those lines in the ProGuard-rules.txt and the problem not solved

Code

Preference appearance = findPreference(AppearanceSettingsFragment.class.getSimpleName());
            appearance.setOnPreferenceClickListener(prefClickListener);

Preference behavior = findPreference(BehaviorSettingsFragment.class.getSimpleName());
            behavior.setOnPreferenceClickListener(prefClickListener);

Preference storage = findPreference(StorageSettingsFragment.class.getSimpleName());
            storage.setOnPreferenceClickListener(prefClickListener);

Preference browser = findPreference(BrowserSettingsFragment.class.getSimpleName());
            browser.setOnPreferenceClickListener(prefClickListener);

Preference limitations = findPreference(LimitationsSettingsFragment.class.getSimpleName());
            limitations.setOnPreferenceClickListener(prefClickListener);

Config

-keep interface androidx.** { *; }
-keep class androidx.** { *; }

-keep class com.android.** { *; }
-keep class com.google.** { *; }

-keep class SettingsFragment.** { *; }
-keep class com.mix.downloader.model.* { *; }
-keepattributes Annotation,Signature

Above is what I have tried, still issue is not resolved.

Exception reported

FATAL EXCEPTION: main Process: com.mix.downloader, PID: 31333 java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.preference.Preference.setOnPreferenceClickListener(androidx.preference.Preference$OnPreferenceClickListener)' on a null object reference at com.mix.downloader.ui.settings.SettingsFragment.onViewCreated(SettingsFragment.java:115) at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:5) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:262) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:117) at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:31) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:57) at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:10) at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:12) at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:5) at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:21) at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:1) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) at android.app.Activity.performStart(Activity.java:8231) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3845) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2309) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:246) at android.app.ActivityThread.main(ActivityThread.java:8587) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)

1

There are 1 best solutions below

0
Mohamed Alsaid On

You need to also -keep all your SettingsFragment classes since you're using Class.class.getSimpleName() which will be affected by Proguard/R8. Guessing from your stacktrace, it will look something like this:

-keep class com.mix.downloader.ui.settings.** { ; }