添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

21 人关注

我的应用程序在调试模式下运行良好。不幸的是,在上传到Google Play Store后,我发现该应用程序崩溃了。我搜索了几个类似的问题,它们都建议禁用 プログラム 或检查日志输出。然而,我遇到了以下情况,当使用 释放 构建变体。

1- 在正常情况下,当 minifyEnabled true 时,应用程序崩溃,我无法看到任何日志输出。有 没有可调试的进程 .

release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
            shrinkResources true
            //minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config

也试过在AndroidManifest.XML中硬编码android:debuggable="true",但出现了错误。

The strange thing is that by setting debuggable to true the app works fine. I am not sure whether I should keep debuggable true in the 释放 mode or disable minification, Or any other workaround to tackle this issue.

如果有人能分享如何解决这个问题,我将非常感激。

更新。 by running 安卓设备监控我能够找到问题所在。

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)
    
5 个评论
你可以使用Crashanlytics这样的工具,加上一些额外的程序配置,找到代码的哪一部分出错。 docs.fabric.io/android/crashlytics/dex和proguard.html
我在6个月前也有同样的问题,并自己解决了。也许它能帮助你 stackoverflow.com/a/38702394/5649620
如果应用程序的崩溃发生,那么你需要配置ProGuard。具体的配置取决于你的项目和它的依赖性。每个项目都会有不同的配置。
4年过去了,这仍然是一个问题。到处都有关于应用程序在发布模式下崩溃的电话,显然,这是minifyenabled问题。安卓真的是个垃圾操作系统,而且Gooogle的管理也很差。
@user2424380 我能够使用Android设备监视器捕捉到这个错误。不幸的是,这个工具在最新的版本中被弃用了,转而使用调试器窗口。然而,如果你仍然无法看到崩溃日志,你可以使用崩溃报告工具,或者在可调试为真时,在发布模式下彻底测试你的应用程序。
java
android
logging
gradle
Darush
Darush
发布于 2017-01-28
2 个回答
Darush
Darush
发布于 2022-11-29
已采纳
0 人赞同

看起来Proguard没能正确处理SearchView部件。我添加了以下一行到 担保人-规则.亲 文件位于 应用程序 folder and the problem dis应用程序eared:

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

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

UPDATE:

对于那些仍然无法在android studio中看到错误日志或在发布版本中重现崩溃的人,他们可以使用在线崩溃报告工具。

我有一个类似的问题,改变-保持类的值似乎也不能解决。该应用程序在模拟器中运行良好,但在我的手机上却崩溃了。为了多挤出一毫秒的加载速度优化,他们让Android Studio变得如此反常,真是令人遗憾。
不幸的是,对我来说,minifyEnabled也会导致崩溃,说实话,如果它不需要我去找并明确指出不进行minify的例外情况就能工作,那就不值得这么麻烦了。令人失望的是,它并不是开箱即用的。
我也有同样的问题,我的应用程序中没有任何SearchView,但它仍然崩溃!!。对此有什么建议吗!?
你可以在运行你的应用程序时在终端运行adb logcat,然后你就可以看到输出了
在我的情况下,logcat选项是一种方法。
Pexers
Pexers
发布于 2022-11-29
0 人赞同

我有同样的应用程序崩溃问题。在我的例子中,我正在读取一个JSON文件,从 资产 并将其转换为Kotlin 数据类 ,使用Gson库。这些都是类。

data class JournalData(
    val name: String,
    val url: String,
    val category: Categories
enum class Categories { POLITICS, SPORTS, TECHNOLOGY }

我在使用minifyEnabled=true时遇到了两个问题。

  • Data class properties were being obfuscated with random names. For instance, the property name was being obfuscated to XYZ, or any other random name.
  • The Categories enum class constants were being obfuscated as well, so the parser couldn't associate the JSON text to those enum constants.
  • Solution

  • I added the @Keep annotation to both the 数据类 and the enum class, like so:
  • @Keep
    data class JournalData(
        val name: String,
        val url: String,
        val category: Categories
    @Keep
    enum class Categories { POLITICS, SPORTS, TECHNOLOGY }
    

    通过这样做,你就指定了这些类和各自的属性/常量不能被担保人启用最小化功能时。