- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序在 Debug模式下运行良好。不幸的是,在上传到 Google Play 商店后,我发现该应用程序崩溃了。我搜索了几个类似的问题,所有这些问题都建议禁用 Proguard 或检查日志输出。但是,在使用 release Build Variant 时,我遇到了以下情况:
1- 在正常情况下,当 minifyEnabled
为 true
时,应用程序崩溃并且我看不到任何日志输出。没有没有可调试的进程。
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
2- 让 debuggable true
我的应用工作正常。但我还是看不到任何错误日志,因为该应用运行正常。
release {
debuggable true
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
3- 评论 minifyEnabled true
应用程序运行。但是我失去了缩小的好处。
release {
shrinkResources true
//minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
还尝试在 AndroidManifest.XML 中对 android:debuggable="true"
进行硬编码,这会产生错误。
奇怪的是,通过将 debuggable 设置为 true,应用程序可以正常工作。我不确定是否应该在 Release模式下保持 debuggable true
或禁用缩小,或任何其他解决方法来解决此问题。
如果有人能分享如何解决这个问题,我将不胜感激。
更新:通过运行 Android Device Monitor 我能够找到问题:
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)
最佳答案
看起来 Proguard 无法正确处理 SearchView 小部件。我将以下行添加到位于 app 文件夹内的 proguard-rules.pro 文件中,问题消失了:
-keep class android.support.v7.widget.SearchView { *; }
现在我不需要将 minifyEnabled 设置为 false。
对于仍然无法在 android studio 中查看错误日志或在发布版本中重现崩溃的用户,他们可以使用在线崩溃报告工具。
关于java - minifyEnabled 导致应用程序在 Release模式下崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900434/
我正在编写一个 android 项目,并尝试编译它以供发布。在我的项目中,我使用了 3rd 方项目,例如 couchbase-lite。 buildTypes { release {
我的 Assets 文件夹中有一个目录,其中包含用于数据库的 json。 assets/database/database_1/locations.json 当使用 minifyEnabled tru
我的 ProGuard 中有这个类。 -keep,allowshrinking class com.MyClass { public ; protected ; public
Unfortunately XX has stopped. 当我启动我的高效应用程序时,当我设置时,我会立即收到此消息 buildTypes { release { minif
大家好,在更改 build.gradle 属性后 minifyEnabled true 我收到以下错误。我读到如果我们使用 minifyEnabled true 那么 The ProGuard too
我的应用程序在 Debug模式下运行良好。不幸的是,在上传到 Google Play 商店后,我发现该应用程序崩溃了。我搜索了几个类似的问题,所有这些问题都建议禁用 Proguard 或检查日志输出。
我是 android 的初学者,我写过这样的代码。如果我启用 minifyEnabled = true,则不会触发该特定代码,而且我也不知道如何正确调试(我只能记录)。我该怎么办? Datab
使用外部库(SumUp)构建APK时出现此错误 Error:Execution failed for task ':app:transformClassesAndResourcesWithProgua
这是我的错误信息: Unexpected error while performing partial evaluation: Class = [org/apache/log4j/ch
在 build.gradle (app) 文件中我们默认有这个, buildTypes { release { minifyEnabled false prog
我无法在调试和 Release模式下使用 minifyEnabled true 运行 apk。我已经引用了下面的链接,但没有一个对我有用。 1. Android- Error:Execution fa
当我在任何变体(调试或发布)中将 minifiyEnabled 设置为 true 时,它会给出以下错误 - Warning:retrofit.appengine.UrlFetchClient: c
调试器不会在任何断点处停止。我尝试清除所有断点并将它们添加回去,但我在控制台中看到调试语句。 根据 this answer ,在你的应用程序模块的 build.gradle 中,为我的构建变体禁用 m
我无法在调试和 Release模式下使用 minifyEnabled true 运行 apk。我已经引用了下面的链接,但没有一个对我有用。 1. Android- Error:Execution fa
我这几天一直有问题。我正在使用 Firebase 云消息传递向我的 Android 应用程序发送通知。当 minifyEnabled=false 时,通知进入 Release模式。然而,当 minif
我试图通过将 minifyEnabled 和 shrinkResources 设置为 true 来缩小我的 apk 大小,但是在启动时我的应用程序崩溃并出现此错误(简短版本): java.lang.C
我有一个 Android 应用程序,我刚刚完成它的开发并准备在 PlayStore 上发布它。但是,为了避免其他人直接反编译它,我想添加 proguard 安全层。 我尝试在将 minifyEnabl
我有一个应用程序在调试时工作正常,但是当我制作发布版本时,在 build.gradle 文件中使用 minifyEnabled true,它似乎无法工作完全没有了: D/SapphirePocket(
这是我第一次使用 Proguard 文件。我开始了一个新项目,这样我就可以了解更多关于 Proguard 文件的信息。 我的问题是当我启用 Proguard 时出了点问题。 Hello world 从
我需要启用混淆器,所以我将 minifyEnabled 设置为 true。但是,在尝试构建发布 APK 时出现以下错误: Error:Execution failed for task ':app:p
我是一名优秀的程序员,十分优秀!