跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

【SQ10014】targetSdkVersion为28时,QQ分享报错提示找不到org/apache/http/conn/scheme/SchemeRegistry 类

问题描述

App的targetSdkVersion设置为28时,在Android 9.0及以上的手机上进行QQ分享报错。提示找不到 org/apache/http/conn/scheme/SchemeRegistry 类。

  • 错误内容如下:

ATAL EXCEPTION: Thread-8
Process: com.umeng.soexample, PID: 6628
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/conn/scheme/SchemeRegistry;
    at com.tencent.open.utils.HttpUtils.getHttpClient(ProGuard:626)
    at com.tencent.open.utils.HttpUtils.openUrl2(ProGuard:506)
    at com.tencent.open.utils.f$1.run(ProGuard:197)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.conn.scheme.SchemeRegistry" on path: DexPathList[[zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/com.google.android.maps.jar", zip file "/data/app/com.umeng.soexample-hL695zdNtHvGmml2zdVKVg==/base.apk"],nativeLibraryDirectories=[/data/app/com.umeng.soexample-hL695zdNtHvGmml2zdVKVg==/lib/arm64, /data/app/com.umeng.soexample-hL695zdNtHvGmml2zdVKVg==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 3 more

解决方案

  1. 确保App对应build.gradle脚本配置中 compileSdkVersion值为28。

android {
    compileSdkVersion 28
    ......

    defaultConfig {
        applicationId "com.umeng.soexample"
        minSdkVersion 18
        targetSdkVersion 28
  1. 在App清单文件AndroidManifest.xml application项中配置useLibrary项。明确引用org.apache.http.legacy库。

    ......

    <application  android:label="@string/app_name"
        android:icon="@drawable/umeng_share_solid_icon"
        android:name=".App">

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

        <activity
        ......
  • sync gradle配置,clean工程,rebuild工程,重新安装App。已在运行Android 9.0的Google Pixel手机上实测,报错问题不再复现。

Apache HTTP 客户端弃用(摘自Android 9.0官方变更说明)

https://developer.android.google.cn/about/versions/pie/android-9.0-changes-28#apache-p

  1. 在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。

  2. 要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>
  • 注:拥有最低 SDK 版本 23 或更低版本的应用需要 android:required=”false” 属性,因为在 API 级别低于 24 的设备上,org.apache.http.legacy 库不可用。 (在这些设备上,Apache HTTP 类在 bootclasspath 中提供。