NoClassDefFoundError: Failed resolution of: Lorg/apache/http/params/BasicHttpParams;闪退

博客主要围绕Android 9闪退问题展开。先是在AndroidManifest.xml文件的application标签里添加权限,解决了ClassNotFoundException错误,但仍闪退并出现http请求禁止错误。通过在application节点添加android:usesCleartextTraffic=\true\属性,最终解决了闪退问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android9的问题

首先需要在AndroidManifest.xml文件的application标签里面加入

<uses-library android:name="org.apache.http.legacy" android:required="false" />

然后添加该权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

在AndroidManifest.xml的application节点下 添加以下内容:

<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />
<application
            android:name=".application.MyApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:largeHeap="true"
            android:theme="@style/QMUI.Compat.NoActionBar"
            tools:ignore="GoogleAppIndexingWarning">
        <!--android9闪退-->
        <uses-library
                android:name="org.apache.http.legacy"
                android:required="false" />


加上这么一段代码之后呢,ClassNotFoundException的错是不报了,但是还是闪退,并给你一个

java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted   

这样的错,网上找了一下据说是Android9.0 默认是禁止所有的http请求的,我们还需要在AndroidManifest.xml的application节点中加上android:usesCleartextTraffic="true"属性,如下:

<application
            android:name=".application.MyApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:largeHeap="true"
            android:theme="@style/QMUI.Compat.NoActionBar"
            android:usesCleartextTraffic="true"
            tools:ignore="GoogleAppIndexingWarning">
        <!--android9闪退-->
        <uses-library
                android:name="org.apache.http.legacy"
                android:required="false" />


这样Android9闪退的问题就解决啦!

原文:https://blog.youkuaiyun.com/qq_36611526/article/details/89466341 
 

<think>好的,我现在需要解决用户提到的Java中的NoClassDefFoundError错误,特别是关于com.chrnie.initializer.Initializer类的问题。首先,我需要回忆一下这个错误的常见原因和解决方法。根据用户提供的引用内容,可能的原因包括类路径配置错误、依赖未正确加载或类文件缺失等。 首先,用户提供的引用[1]指出,这个错误通常是因为JVM在运行时找不到某个类的定义,可能类路径不正确或者依赖未被正确加载。引用[3]提到在Spring MVC项目中,这可能是由于依赖包未成功发布。因此,我需要从这些方面入手分析。 第一步,检查类路径是否正确。用户的项目可能存在类路径配置错误,导致Initializer类没有被正确包含。需要确认编译后的class文件是否存在于预期的目录中,比如target/classes或build/classes下。如果使用IDE如IntelliJ IDEA,可能需要检查输出路径设置是否正确。 接下来,检查依赖管理。如果Initializer类属于某个外部库或模块,用户可能没有正确引入该依赖。比如在Maven项目中,pom.xml文件是否包含该依赖,并且版本是否正确。有时候依赖可能没有正确下载,需要执行mvn clean install或更新项目依赖。 另外,构建工具的问题也需要考虑。用户是否执行了完整的构建过程?比如在Maven中是否执行了clean和compile,或者在Gradle中是否执行了clean build。有时候旧的编译文件可能导致问题,清理后重新构建可能会解决。 类加载问题也是一个可能因素,特别是在使用Spring Boot或应用服务器时。需要确认Initializer类是否被正确的类加载器加载,特别是在复杂的类加载机制下,可能存在冲突或遗漏的情况。引用[2]中的例子展示了排除某些自动配置的方法,如果用户的项目中排除了必要的配置,可能导致类加载失败。 此外,检查代码中是否有静态块或初始化错误。如果Initializer类在静态初始化时抛出异常,也可能导致NoClassDefFoundError。需要查看类中的静态代码块或静态变量初始化是否有潜在问题,比如资源加载失败或异常未被捕获。 还有可能的问题是包结构不正确。确认com.chrnie.initializer包是否存在,Initializer类的全限定名是否与文件路径匹配。在Java中,包名必须与目录结构一致,否则编译器可能无法找到类文件。 最后,考虑IDE的缓存问题。有时候IDE的缓存可能导致类文件未被正确识别,尝试清理并重启IDE可能会有帮助。例如,在IntelliJ中执行File -> Invalidate Caches并重启。 总结下来,解决步骤大致包括检查类路径、验证依赖、重新构建项目、检查类加载和初始化、确认包结构以及处理IDE缓存问题。需要指导用户逐一排查这些可能性,找到具体原因后采取相应措施。</think>### 解决Java中NoClassDefFoundError: com.chrnie.initializer.Initializer的方法 #### 1. **确认类路径配置** - **检查编译输出目录** 确保`com.chrnie.initializer.Initializer`的编译文件(`.class`)存在于构建路径中(如`target/classes`或`build/classes`)。若使用IDE(如IntelliJ IDEA),检查项目设置中的输出路径是否正确[^3]。 - **验证运行时类路径** 在命令行执行时,通过`-classpath`参数显式指定类路径,例如: ```bash java -classpath "target/classes:lib/*" com.example.Main ``` #### 2. **检查依赖管理** - **Maven/Gradle依赖** 若`Initializer`类属于第三方库,确认`pom.xml`(Maven)或`build.gradle`(Gradle)中已正确声明依赖,例如: ```xml <!-- Maven示例 --> <dependency> <groupId>com.chrnie</groupId> <artifactId>initializer</artifactId> <version>1.0.0</version> </dependency> ``` - **依赖下载与更新** 执行`mvn clean install`(Maven)或`gradle build --refresh-dependencies`(Gradle),强制重新下载依赖[^3]。 #### 3. **重新构建项目** - 清理旧编译文件并重新编译: ```bash mvn clean compile # Maven gradle clean build # Gradle ``` #### 4. **检查类加载问题** - **静态初始化错误** 若`Initializer`类包含静态代码块,可能因初始化失败导致错误。检查类中是否有未捕获的异常,例如: ```java public class Initializer { static { // 可能抛出异常的代码(如加载配置文件) } } ``` - **类加载器冲突** 在模块化应用(如Spring Boot)中,确认类未被多個类加载器重复加载。可尝试通过`Class.forName()`显式加载类以调试: ```java try { Class.forName("com.chrnie.initializer.Initializer"); } catch (ClassNotFoundException e) { e.printStackTrace(); } ``` #### 5. **验证包结构与类定义** - **包名与目录一致性** 确认`Initializer.java`的路径为`src/main/java/com/chrnie/initializer/Initializer.java`,且包声明为: ```java package com.chrnie.initializer; ``` #### 6. **处理IDE缓存问题** - 在IntelliJ IDEA中执行以下操作: `File -> Invalidate Caches / Restart -> Invalidate and Restart`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值