Didn‘t find class “androidx.core.app.CoreComponentFactory“核心库中类加载失败

这篇具有很好参考价值的文章主要介绍了Didn‘t find class “androidx.core.app.CoreComponentFactory“核心库中类加载失败。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发过程中遇到一个问题,是Bugly上报的崩溃,应用首次安装第一次打开时出现崩溃,日志大致信息报错如下:

03-24 14:20:58.443 13845 13845 E LoadedApk: Unable to instantiate appComponentFactory
03-24 14:20:58.443 13845 13845 E LoadedApk: java.lang.ClassNotFoundException: Didn't find class "androidx.core.app.CoreComponentFactory" on path: DexPathList[[zip file "/data/app/*******-9uPTAyghm4ueO6sJsBeCgA==/base.apk"],nativeLibraryDirectories=[/data/app/*******-9uPTAyghm4ueO6sJsBeCgA==/lib/arm64, /data/app/*******-9uPTAyghm4ueO6sJsBeCgA==/base.apk!/lib/arm64-v8a, /system/lib64]]
03-24 14:20:58.443 13845 13845 E LoadedApk: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
03-24 14:20:58.443 13845 13845 E LoadedApk: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
03-24 14:20:58.443 13845 13845 E LoadedApk: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
03-24 14:20:58.443 13845 13845 E LoadedApk: at android.app.LoadedApk.createAppFactory(LoadedApk.java:226)

分析报错日志,我们可以看到是核心库加载失败,由BaseDexClassLoader抛出异常,这里我贴出BaseDexClassLoader#findClass(String name)方法的源码,感兴趣的可以看看。

 @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        // First, check whether the class is present in our shared libraries.
        if (sharedLibraryLoaders != null) {
            for (ClassLoader loader : sharedLibraryLoaders) {
                try {
                    return loader.loadClass(name);
                } catch (ClassNotFoundException ignored) {
                }
            }
        }
        // Check whether the class in question is present in the dexPath that
        // this classloader operates on.
        List<Throwable> suppressedExceptions = new ArrayList<Throwable>();
        Class c = pathList.findClass(name, suppressedExceptions);
        if (c != null) {
            return c;
        }
        // Now, check whether the class is present in the "after" shared libraries.
        if (sharedLibraryLoadersAfter != null) {
            for (ClassLoader loader : sharedLibraryLoadersAfter) {
                try {
                    return loader.loadClass(name);
                } catch (ClassNotFoundException ignored) {
                }
            }
        }
        if (c == null) {
            ClassNotFoundException cnfe = new ClassNotFoundException(
                    "Didn't find class \"" + name + "\" on path: " + pathList);
            for (Throwable t : suppressedExceptions) {
                cnfe.addSuppressed(t);
            }
            throw cnfe;
        }
        return c;
    }

引起该错误的原因与压缩混淆有关,高版本的Gradle打包默认采用R8进行压缩,相关概念和原理可自行搜索,我这边的解决方案是:既然启动时没有加载到该类,那么我们就设置先加载该类,加载完毕之后再加载其他的类,因此我们需要做一些配置来解决该问题:

buildscript {
    ext {
        //R8混淆开启之后解决APP打开类加载时找不到类的问题,指定文件来放置启动时需要优先加载的类
        MAINDEXLIST = 'maindexlist.txt'
    }

项目路径下下创建maindexlist.txt文件,并将报错的类文件的路径按如下方式加入文件中

androidx/core/app/CoreComponentFactory.class
androidx/coordinatorlayout/widget/CoordinatorLayout.class

在app模块对应的build.gradle文件的buildTypes闭包下的debug和realease类型下添加
multiDexKeepFile file(rootProject.ext.MAINDEXLIST)

buildTypes {
    debug {
        ......
        multiDexKeepFile file(rootProject.ext.MAINDEXLIST)
    }
    release {
        ......
        multiDexKeepFile file(rootProject.ext.MAINDEXLIST)
    }
}

以上配置即可解决该问题。文章来源地址https://www.toymoban.com/news/detail-589603.html

到了这里,关于Didn‘t find class “androidx.core.app.CoreComponentFactory“核心库中类加载失败的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EasyExcel报错Can not find ‘Converter‘ support class Map.解决办法

    最近在将POI改造easyexcel,遇到报错如下 修改办法是在实体类加上如下注解即可解决,最主要的是@ExcelIgnoreUnannotated,其他注解可不加,这个注解的意思官网上有,可以自己去读一下官网。 报错信息

    2024年02月10日
    浏览(45)
  • 服务器上出现Error: Could not find or load main class错误

    今天学习了NIO的相关知识,找了一篇大佬的博客,照着编写的代码写了起来。 链接附上 https://blog.csdn.net/qq_42511550/article/details/124180814 针对下面的案例,自己突发奇想,想试着将服务端的代码在服务器上进行运行,但是服务器配置java环境遇到了点问题,搞了1小时才找到错误。

    2024年01月25日
    浏览(42)
  • 解决raise FileNotFoundError(f“Couldn’t find any class folder in {directory}.“) FileNotFoundError: Coul

    在用pycharm运行深度神经网络加载数据时,发现报错 Traceback (most recent call last): File “D:/PyCharmWorkPlace/graduate_project/lsgan/main.py”, line 16, in class LSGAN: File “D:/PyCharmWorkPlace/graduate_project/lsgan/main.py”, line 125, in LSGAN dataset = dset.ImageFolder(root=dataroot, File “D:welcomeminicondaenvstensorflowl

    2024年02月07日
    浏览(35)
  • Spark-Core核心算子

    1、Spark简介 2、Spark-Core核心算子 3、Spark-Core 4、SparkSQL 1、从集合中获取 2、从外部存储系统创建 3、从其它RDD中创建 在其它执行步骤完成后,生成新的RDD对象 4、分区规则—load数据时 从集合中创建 从文件中创建 1、Value类型 1.1 map()_ 1.2 mapPartitions() 以分区为单位执行的 map() 1

    2024年02月10日
    浏览(35)
  • 详解织梦模板DEDECMS核心类TypeLink.class.php功能分析

    DedeCMS 核心类TypeLink.class.php摘要笔记,学习php就是借鉴与分析,让自己的掌握的更多。 注:\\\'//+\\\' 表示为本人另外加上的注释 功能一,获得某类目的链接 代码如下: 功能二,获得某类目的链接列表 如:\\\'类目一类目二\\\' 这样的形式。 代码如下: 功能三, 获得类别列表 高级搜索功

    2024年02月02日
    浏览(26)
  • [OS/Linux] Linux核心参数:net.core.somaxconn(高并发场景核心参数)

    近期工作在搞压力测试,我负责开发维护的、基于 sring-cloud-gateway 的 大数据网关 微服务,其底层是基于 spring-webflux -- reactor-netty -- netty 。 在压测过程中(200并发--1000并发),发现大数据网关屡报 ConnectException: finishConnect(..) failed: Connection refused 错误。 关键行: io.netty.channe

    2024年02月04日
    浏览(26)
  • 解决CocoaPods could not find compatible versions for pod “React-Core”

    一、当执行ios项目时,执行 pod install 出现下面的错误信息 二、错误原因 这个错误是由于 React-Core 这个依赖库需要的最低部署目标高于当前项目的部署目标,导致 CocoaPods 找不到符合要求的版本。 三、要解决这个问题,可以尝试以下几个步骤 检查项目的部署目标是否符合 R

    2024年02月12日
    浏览(37)
  • Core Web Vitals 核心网页指标衡量指南

    在数字表面上,网站的速度和可用性比以往任何时候都更加重要。核心网络生命力是帮助我们了解用户如何体验网页的重要指标。 谷歌 引入了这些指标,这对于任何想要提高网站性能的人来说都很重要。今天,我们将讨论什么是 核心网络生命力 以及如何在 2024 年衡量它们。

    2024年04月15日
    浏览(28)
  • .Net Core核心概念——依赖注入和中间件

    1. 为什么要用依赖注入(DI) 什么是依赖注入,为什么要使用呢?简单通俗说就是一个类需要另一个类来协助工作,就产生了依赖,所以需要的依赖项就要【注入】过来一起来协同完成工作。 软件设计原则中有一个依赖倒置原则(DIP)讲的是要依赖于抽象,不要依赖于具体,高层

    2024年02月08日
    浏览(32)
  • 记一次 jenkins 构建失败 “Cannot find module ‘core-js/modules/es.promise.finally‘”

    这是一次前端项目构建失败的惨案,项目已经部署很久了,一直相安无事。因为开发更新了代码,在构建的时候报错:main.js: Cannot find module ‘core-js/modules/es.promise.finally’ 因为jenkins是用K8S部署的而且我没参与部署,这里踩了不少的坑,首先看到报错想到的是core-js模块未安装

    2024年02月13日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包