minifyEnabled导致应用在发布模式下崩溃

Dar*_*ush 5 java logging android gradle

我的应用程序在调试模式下工作正常。不幸的是,上传到Google Play商店后,我发现该应用程序崩溃了。我搜索了几个类似的问题,所有这些问题都建议禁用Proguard或检查Log输出。但是,使用发行版 Build Variant 时遇到以下情况:

1在正常情况下minifyEnabledtrue应用程序崩溃,我无法看到任何日志输出。有没有调试的过程

release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
Run Code Online (Sandbox Code Playgroud)

2-使debuggable true我的应用程序工作正常。但是,由于该应用程序运行正常,因此我再也看不到任何错误日志。

release {
            debuggable true
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
Run Code Online (Sandbox Code Playgroud)

3-评论minifyEnabled true应用程序的作品。但是我失去了缩小收益。

release {
            shrinkResources true
            //minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
Run Code Online (Sandbox Code Playgroud)

还尝试android:debuggable="true"在AndroidManifest.XML中进行硬编码,这会导致错误。

奇怪的是,通过将debuggable设置为true,应用程序可以正常运行。我不确定我应该保持debuggable true释放模式还是禁用缩小功能,或者其他解决方法来解决此问题。

如果有人可以分享解决此问题的方法,我将非常感激。

更新:通过运行Android设备监视器,我能够找到问题:

01-28 00:28:13.764: E/AndroidRuntime(4806): FATAL EXCEPTION: main
01-28 00:28:13.764: E/AndroidRuntime(4806): Process: com.example.myapp, PID: 4806
01-28 00:28:13.764: E/AndroidRuntime(4806): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference
01-28 00:28:13.764: E/AndroidRuntime(4806):     at com.example.myapp.MainActivity.onCreateOptionsMenu(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.app.Activity.onCreatePanelMenu(Activity.java:3142)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v4.b.n.onCreatePanelMenu(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v7.view.i.onCreatePanelMenu(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v7.app.h$b.onCreatePanelMenu(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v7.view.i.onCreatePanelMenu(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v7.app.q.j(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.support.v7.app.q$1.run(Unknown Source)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.os.Handler.handleCallback(Handler.java:739)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.os.Handler.dispatchMessage(Handler.java:95)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.os.Looper.loop(Looper.java:148)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at android.app.ActivityThread.main(ActivityThread.java:7329)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at java.lang.reflect.Method.invoke(Native Method)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
01-28 00:28:13.764: E/AndroidRuntime(4806):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Run Code Online (Sandbox Code Playgroud)

Dar*_*ush 8

看起来Proguard无法正确处理SearchView小部件。我将以下行添加到位于应用程序文件夹中的proguard-rules.pro文件中,问题消失了:

-keep类android.support.v7.widget.SearchView {*; }

现在,我不需要将minifyEnabled设置为false。

  • 不幸的是,对我来说 minifyEnabled 也导致了崩溃,老实说,如果它无法正常工作而我不必戳它来查找并明确调用异常以不缩小,那么它不值得麻烦。令人失望的是,它不仅开箱即用。 (4认同)