【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解决方案
确保App对应build.gradle脚本配置中 compileSdkVersion值为28。
android {
compileSdkVersion 28
......
defaultConfig {
applicationId "com.umeng.soexample"
minSdkVersion 18
targetSdkVersion 28在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
在 Android 6.0 中,我们取消了对 Apache HTTP 客户端的支持。 从 Android 9 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。
要继续使用 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 中提供。