个人感觉其实release闪退的问题挺难排查的,因为release包运行起来as捕获不到相应的应用程序进程,从而不易查看到日志,也是我玩得不溜,大家有不同的方法可以评论区探讨,我也定期回复一些评论一起讨论。以下是我遇到的情况以及解决思路:
问题描述:
开发的时候都是用debug模式进行的,一直正常使用,然后打release包的时候就闪退了,直接在as上运行看看,发现日志用不了只能读取到之前debug模式下的死亡进程。压根读取不到release进程。出现这种情况往往是因为混淆导致的。
步骤:
1、首先我们要把构建模式改成release,如下图,点击左下角的Build Variant,弹出窗口,把app模块后面的debug改成release,其他模块也会同步变成release,
步骤二:观察logcat窗口,如图,当前进程已经死亡,并且捕获不到发布版的进程,但是可以通过右边的过滤器来选择No filter来查看as捕获到的手机里全部的日志,这样就包含当前运行的程序日志,如图,把日志等级选项选择为error,因为信息太多,而导致崩溃的错误也一定是error级别,所以改成error有助于我们快速抓取有用的信息
步骤三:然后我们清空一下日志窗口,然后立马点击手机上的应用图标启动,这个时候,如果应用闪退了,就 可以捕获到错误了
教程主要是记录依稀工具的使用,具体错误还是具体自己排查吧,我再次记录一下我的问题,
我的报错行是
EventBus.getDefault().register(this)
被混淆掉了,我们在混淆文件proguard-rules.pro中把它过滤一下:
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# EventBus 3.0
-keepclassmembers class ** {
public void onEvent*(**);
}
# EventBus 3.0 annotation
-keepclassmembers class * {
@de.greenrobot.event.Subscribe <methods>;
}
或者用不到订阅直接删掉相关的代码也可以。
到此我的故事就讲完了,主要是为了记录,如果帮到你了,不胜荣幸,如果你的问题不对症,那么不好意思浪费你时间了,不过学习没有尽头的,相遇也一定是缘分。