移动热修复-补丁加载成功后apache网络库请求报错

使用热修复3.2.7及以上版本,补丁加载成功后,使用apache网路库进行请求,在Android 9或以上可能会报错,处理方法:

  • 删除有关apache的所有jar依赖包
  • 在gradle的android标签下添加useLibrary 'org.apache.http.legacy',示例:
  1. android {
  2. compileSdkVersion 28
  3. useLibrary 'org.apache.http.legacy'
  4. defaultConfig {
  5. applicationId "xxx.xxx.xxx"
  6. minSdkVersion 14
  7. targetSdkVersion 28
  8. //...
  9. }
  10. }
  • 在AndroidManifest.xml文件下添加如下示例的uses-library:
  1. <application
  2. android:name=".SophixStubApplication"
  3. android:allowBackup="true"
  4. android:icon="@mipmap/ic_launcher"
  5. android:label="@string/app_name"
  6. android:roundIcon="@mipmap/ic_launcher_round"
  7. android:supportsRtl="true"
  8. android:theme="@style/AppTheme"
  9. tools:ignore="GoogleAppIndexingWarning">
  10. <uses-library
  11. android:name="org.apache.http.legacy"
  12. android:required="false" />
  13. //...
  14. </application>
  • 如开启了混淆,添加apache相关混淆规则,如:
  1. #apache
  2. -keep class org.dom4j.** { *; }
  3. -dontwarn org.apache.*
  4. -keep class org.apache.** { *; }
  5. -dontwarn org.xmlpull.*
  6. -keep class org.xmlpull.** { *; }
  7. -dontwarn com.jcraft.*
  8. -keep class com.jcraft.** { *; }
  9. -dontwarn android.net.compatibility.**
  10. -dontwarn android.net.http.**
  11. -dontwarn com.android.internal.http.multipart.**
  12. -dontwarn org.apache.commons.**
  13. -dontwarn org.apache.http.**
  14. -dontwarn org.apache.http.protocol.**
  15. -keep class android.net.compatibility.*{ *; }
  16. -keep class android.net.http.*{ *; }
  17. -keep class com.android.internal.http.multipart.{ *; }
  18. -keep class org.apache.commons.{ *; }
  19. -keep class org.apache.org.{ *; }
  20. -keep class org.apache.harmony.{ *; }

上述步骤操作完毕后,重新打新旧apk包及补丁,然后再次使用新生成的这个旧包去加载对应补丁,应该不会再出现apache请求失败的问题了。

如上述方法未解决apache请求报错问题,请联系技术支持解决。