[英]Android App crashes in the release build due to NullPointerException when setting minifyEnabled to true and shrinkResources to true
當將minifyEnabled
設置為true
時會導致nullpointerException
當我將minifyEnabled
設置為false
時問題消失了
但我想將minifyEnabled
設置為true
並將shrinkResources
設置為true
以保持我的應用程序較小並刪除未使用的類
還嘗試使用ProGuard-rules.txt
中的那些行,但問題未解決
代碼
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);
配置
-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
以上是我試過的,問題還是沒有解決。
異常報告
致命異常:主進程:com.mix.downloader,PID: 31333 java.lang.NullPointerException:嘗試調用虛方法'void androidx.preference.Preference.setOnPreferenceClickListener(androidx.preference.Preference$OnPreferenceClickListener)' 88634189858321 引用在 com.mix.downloader.ui.settings.SettingsFragment.onViewCreated(SettingsFragment.java:115) 在 androidx.fragment.app.Fragment.performViewCreated(Fragment.java:5) 在 androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.createView .java:262) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:117) 在 androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:31) 在 (app.androidx.moveFragmentManager. FragmentManager.java:57) 在 androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:10) 在 android dx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:12) 在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:5) 在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.88213824695) 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) 在 882461 84094188.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) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
您還需要保留所有SettingsFragment
類,因為您使用的是-keep
Class.class.getSimpleName()
,它會受到 Proguard/R8 的影響。 從您的堆棧跟蹤中猜測,它看起來像這樣:
-keep class com.mix.downloader.ui.settings.** {; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.