簡體   English   中英

Android 將 minifyEnabled 設置為 true 並將 shrinkResources 設置為 true 時,由於 NullPointerException,應用程序在發布版本中崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM