gpt4 book ai didi

android - Android Marshmallow 的 ParseApacheHttpClient 问题 : can't find referenced method SSLSocketFactory. getHttpSocketFactory

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:43 26 4
gpt4 key购买 nike

我正在我的 Android 应用程序中处理 Android Marshmallow 支持,但我有使用已弃用的 Apache HTTP client 的依赖项(包括解析)。

推荐here ,我补充说:

useLibrary 'org.apache.http.legacy'

在我的 app/build.gradle 中,但我仍然无法编译 apk:

:app:compileFreeStoreDebugJavaWithJavac UP-TO-DATE
:app:compileRetrolambdaFreeStoreDebug UP-TO-DATE
:app:compileFreeStoreDebugSources UP-TO-DATE
:app:proguardFreeStoreDebug
Note: there were 7 duplicate class definitions.
(http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)
Warning: com.parse.ParseApacheHttpClient: can't find referenced method 'org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int,android.net.SSLSessionCache)' in library class android.net.SSLCertificateSocketFactory
Warning: there were 1 unresolved references to library class members.
You probably need to update the library versions.
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
Exception while processing task
java.io.IOException: Please correct the above warnings first.
at proguard.Initializer.execute(Initializer.java:473)
at proguard.ProGuard.initialize(ProGuard.java:233)
at proguard.ProGuard.execute(ProGuard.java:98)
at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074)
at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:139)
at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:115)
at com.android.builder.tasks.Job.runTask(Job.java:48)
at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41)
at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227)
at java.lang.Thread.run(Thread.java:745)

谢谢。

最佳答案

这个问题分两部分解决:

  1. 重新添加遗留的 Apache 库
  2. 为 Parse.com 更新 ProGuard 配置

为了完整性,我将在下面解决这两个部分。

对于那些寻求快速修复的人来说,解决方案是将以下行添加到您的 ProGuard 配置文件:

-dontwarn android.net.SSLCertificateSocketFactory

1 - Apache 库

Android-M 移除了对 Apache HTTP 库的支持。如问题中所述,解决方法是通过更新 build.gradle 来使用遗留支持 JAR。这是具有更多上下文的代码:

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
useLibrary 'org.apache.http.legacy'
....
}

2 - 更新 ProGuard 配置

实际错误来自 ProGuard,当它试图处理 Parse.com 时。

Warning: com.parse.ParseApacheHttpClient: 
can't find referenced method 'org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int,android.net.SSLSessionCache)'
in library class android.net.SSLCertificateSocketFactory

Parse 现在是开源的,所以检查问题会在 GitHub 上给出这个页面:

讨论中解释说这只是一个 ProGuard 配置项,可以通过根据相关问题更新配置来安全修复:

更改如下(第 3 行修复了我们的问题,第 4 行修复了相关问题):

-keepattributes *Annotation*
-keepattributes Signature
-dontwarn android.net.SSLCertificateSocketFactory
-dontwarn android.app.Notification
-dontwarn com.squareup.**
-dontwarn okio.**

this comment 中所述,忽略警告是安全的,因为这些类仅在仍包含上述类的 Android 版本上使用。

关于android - Android Marshmallow 的 ParseApacheHttpClient 问题 : can't find referenced method SSLSocketFactory. getHttpSocketFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33352067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com