问题来源:
在他人项目中增加极光推送。添加成功后,在魅族5.1手机上运行无误。然后给到测试,点进app即闪退!!!问题重现:
华为6.0手机-
问题寻找
期初并不知道华为6.0手机会隐藏日志,看了一圈log并没有有效信息(重点关注了Error日志 ,并没有注意Warn日志)。于是debug,到LoginActivity便crash。
问题定位到这里,可是依旧不知道是什么问题。重新仔细查看log,发现了如下图的错误信息:
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.huawei.lcagent.client.LogCollectManager.getUserType()'
于是百度了下这个问题,说是华为6.0中LogCollectManager这个类会隐真实的日志信息
。
-
问题解决
(1) 打开华为的日志信息
在拨号界面输入*#*#2846579#*#*
。进入工程菜单---后台设置----LOG设置---LOG开关 把几个复选框都勾选,这样就可以显示出log。
(2) 执行上一步,再次查看log发现如下信息:
Unknown permission: android.permission.RECEIVE_USER_PRESENT
(3) 查看项目中并没有配置此权限,想到新添加的极光推送,我采用的是jcenter 自动集成,此权限应该就是极光中的。根据日志提示,不识别此权限。因此问题回到开始debug处的代码。
(4) JPermissionUtil 是一个开源项目中的类,用来处理6.0权限的。修改代码,成功解决问题。
//直接添加项目中的所有权限
JPermissionUtil.requestAllPermission(this);
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 改为如下代码 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
List<String> excluePermission = new ArrayList<>();
// 添加剔除掉的权限
excluePermission.add("android.permission.RECEIVE_USER_PRESENT");
JPermissionUtil.requestAllPermission(this, excluePermission);
参考链接:https://blog.csdn.net/qq_36317441/article/details/75112547