文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android报错Didn‘t find class “android.view.x“问题如何解决

2023-07-05 17:33

关注

这篇文章主要讲解了“Android报错Didn‘t find class “android.view.x“问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android报错Didn‘t find class “android.view.x“问题如何解决”吧!

前言

App在debug包时没有问题,但是在release包时就是crash,报错如下:

Android报错Didn‘t find class “android.view.x“问题如何解决

可以看到问题是Didn‘t find class “android.view.x“,但是实际上我们代码中并没有这个类,由于是release包的问题,所以第一时间想到的是混淆问题,检查了一番后发现与混淆无关,经过上网查询发现有人提到说将build.gradle中的shrinkResources设置为false即可解决,经过尝试发现确实解决了问题,但是为什么呢?

shrinkResources

要弄明白问题,首先就要知道shrinkResources是如何工作的。

当我们启用了资源压缩(Resource Shrinking),当打包是会去检查每个资源是否被引用,如果没有被引用,则会进行优化,但是它有两种模式Safe和Strict。

Safe

在这种模式下,除了直接引用,使用动态代码引用的资源(比如使用Resources.getIdentifier()引用资源)也会被保留,这样就不会造成太大的问题。

Strict

在严苛模式下,只有直接引用的资源被保留,其他资源就会被压缩。注意这里是压缩而不是删除,具体表现就是如果是图片,则保留该图片文件,但是内容则为空,如下:

Android报错Didn‘t find class “android.view.x“问题如何解决

可以看到处理过的图片都是67b大小,且没有内容,这样大大减少了空间。

而如果是xml文件,则内容同样为空,如下:

Android报错Didn‘t find class “android.view.x“问题如何解决

可以看到内容变成了,大小都是47b,也是极大的减少了空间。

android.view.x

这样我们就知道Didn‘t find class “android.view.x“问题所在了,一定是我们使用的布局被压缩了,根据crash日志找到NavigateActivity的onCreate方法,这里有如下代码:

mLayoutId = ResourceUtils.getLayoutId(this, "activity_main");...View rootView = View.inflate(this, mLayoutId, null);...setContentView(rootView);

这个activity_main正是通过Resources.getIdentifier()动态引用的,在release包中查看这个布局发现已经是空的了,所以就会报上面的错误。

所以当我们将shrinkResources设置为false后,因为不会执行资源压缩,所以问题解决。

自定义保留

但是在默认情况下资源压缩(Resource Shrinking)的模式是Safe,不应该出现这样的问题,那么说明我们没有从根本上解决问题,我们继续来看。

怎么可以改变资源压缩(Resource Shrinking)的模式,答案是配置自定义保留文件,在res/raw下新建一个keep.xml文件,在其中就可以设置自定义保留策略,一个示例代码如下:

<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools"           tools:discard="@color/selector_tint_color"           tools:keep="@layout/activity_test1,@layout/activity_test2"           tools:shrinkMode="strict"/>

其中:

所以我们知道通过keep.xml可以改变资源压缩(Resource Shrinking)的模式,但是我们并没有这个文件,这时候想到是不是某些三方库在搞鬼,检查apk包我们在res/raw下果然看到一个keep.xml文件,如下:

<?xml version="1.0" encoding="utf-8"?><resources xmlns:tools="http://schemas.android.com/tools"    tools:keep="@layout/hms_download_progress,@drawable/screen_off"    tools:shrinkMode="strict"    />

明显是华为hms库中的,经过一个个筛查发现如下

Android报错Didn‘t find class “android.view.x“问题如何解决

联想到我们刚刚升级了该库,所以一定是这个库开发者在新版本加入了这个东西,但是它影响很大,只能说相当的不负责任了。

感谢各位的阅读,以上就是“Android报错Didn‘t find class “android.view.x“问题如何解决”的内容了,经过本文的学习后,相信大家对Android报错Didn‘t find class “android.view.x“问题如何解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯