使用热修复3.2.7及以上版本,补丁加载成功后,使用apache网路库进行请求,在Android 9或以上可能会报错,处理方法:
- 删除有关apache的所有jar依赖包
- 在gradle的android标签下添加
useLibrary 'org.apache.http.legacy',示例:
android {compileSdkVersion 28useLibrary 'org.apache.http.legacy'defaultConfig {applicationId "xxx.xxx.xxx"minSdkVersion 14targetSdkVersion 28//...}}
- 在AndroidManifest.xml文件下添加如下示例的uses-library:
<applicationandroid:name=".SophixStubApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"tools:ignore="GoogleAppIndexingWarning"><uses-libraryandroid:name="org.apache.http.legacy"android:required="false" />//...</application>
- 如开启了混淆,添加apache相关混淆规则,如:
#apache-keep class org.dom4j.** { *; }-dontwarn org.apache.*-keep class org.apache.** { *; }-dontwarn org.xmlpull.*-keep class org.xmlpull.** { *; }-dontwarn com.jcraft.*-keep class com.jcraft.** { *; }-dontwarn android.net.compatibility.**-dontwarn android.net.http.**-dontwarn com.android.internal.http.multipart.**-dontwarn org.apache.commons.**-dontwarn org.apache.http.**-dontwarn org.apache.http.protocol.**-keep class android.net.compatibility.*{ *; }-keep class android.net.http.*{ *; }-keep class com.android.internal.http.multipart.{ *; }-keep class org.apache.commons.{ *; }-keep class org.apache.org.{ *; }-keep class org.apache.harmony.{ *; }
上述步骤操作完毕后,重新打新旧apk包及补丁,然后再次使用新生成的这个旧包去加载对应补丁,应该不会再出现apache请求失败的问题了。
如上述方法未解决apache请求报错问题,请联系技术支持解决。
该文章对您有帮助吗?