You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android P模拟器运行应用崩溃:java.lang.NoClassDefFoundError问题求助

解决Android P模拟器上java.lang.NoClassDefFoundError: org/apache/http/ProtocolVersion崩溃问题

Hey,这个问题我之前适配Android 9的时候碰到过,核心原因是Android 9.0(API 28)默认移除了对Apache HTTP客户端库的支持,虽然你已经加了useLibrary 'org.apache.http.legacy',但大概率是配置没到位或者漏了关键步骤,给你一步步拆解解决方案:

1. 确认useLibrary的配置位置是否正确

看你贴的build.gradle代码,useLibrary虽然加了,但要确保它放在android闭包的顶级位置,和compileSdkVersion、buildToolsVersion同级,不能嵌套在其他子闭包里。正确的结构应该是这样:

android {
    compileSdkVersion 'android-P'
    buildToolsVersion '28-rc1'
    // 必须放在这里,和其他顶级配置平级
    useLibrary 'org.apache.http.legacy'

    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }

    defaultConfig {
        // 你的默认配置内容...
    }
}

2. 给AndroidManifest.xml添加关键meta-data

光有Gradle配置还不够,得在AndroidManifest.xml的<application>标签里加一行meta-data,强制系统加载遗留的Apache HTTP库:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    ...>

    <!-- 新增这行配置 -->
    <meta-data
        android:name="org.apache.http.legacy"
        android:value="true" />

    <!-- 其他activity、service等配置... -->
</application>

3. 排查依赖冲突(如果前两步没解决)

要是上面两步做完还是崩溃,那可能是项目里的第三方依赖和Apache HTTP库有冲突。你可以执行以下命令查看项目的依赖树:

# Mac/Linux环境
./gradlew app:dependencies

# Windows环境
gradlew.bat app:dependencies

看看有没有重复引入的Apache HTTP相关依赖,如果有,要么升级对应的第三方库版本,要么用exclude语法把冲突的模块去掉,比如:

implementation('com.example.somelibrary:1.0.0') {
    exclude group: 'org.apache.httpcomponents'
}

额外小建议

  • 尽量把compileSdkVersion换成正式的28,而不是预览版的android-P,预览版可能存在一些兼容性坑;
  • 长远来看,建议慢慢迁移到OkHttp或者HttpURLConnection这些官方推荐的HTTP客户端,毕竟Apache HTTP库已经被弃用,后续版本的支持会越来越少。

内容的提问来源于stack exchange,提问作者dukeking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:33