什么是正确的 Android Legacy Apache Http Proguard 规则和配置?
What are the correct Android Legacy Apache Http Proguard rules and configuration?
我有一个 Android AsyncTask,它使用旧版 Apache 进行 HTTP 调用。
当我 运行 非缩小构建变体中的此代码(即未混淆或 sh运行k)时,HTTP 调用成功进行。
一旦我使用 minifyEnabled true
代码就会中断并出现以下错误:
java.lang.RuntimeException: An error occurred while executing doInBackground()
Caused by: java.lang.VerifyError: Verifier rejected class MyAsyncTask:
java.lang.Object MyAsyncTask.doInBackground(java.lang.Object[]) failed to verify:
java.lang.Object MyAsyncTask.doInBackground(java.lang.Object[]):
[0x24] 'this' argument 'Precise Reference:
org.apache.http.impl.client.DefaultHttpClient' not instance of 'Reference:
org.apache.http.impl.client.CloseableHttpClient' (declaration of 'MyAsyncTask' appears in /data/app/org.xx-w1slvEAYxDsAOEktrVoz3A==/base.apk!classes2.dex)
有问题的代码在 doInBackground 方法中,如下所示:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpHead httpHead = new HttpHead("aUrl");
final HttpParams httpParameters = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_VALUE);
HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_VALUE);
HttpResponse response = httpClient.execute(httpHead);
我设置了以下混淆器规则:
-dontwarn org.apache.commons.**
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-keep interface org.apache.** { *; }
-keep enum org.apache.** { *; }
-keep class org.apache.** { *; }
-keep class org.apache.commons.** { *; }
-keep class org.apache.http.** { *; }
-keep class org.apache.harmony.** {*;}
我在 gradle 中使用 useLibrary 'org.apache.http.legacy'
。
我也添加了 apache 依赖项:
httpCore: org.apache.httpcomponents:httpcore:4.4.10,
httpMime: org.apache.httpcomponents:httpmime:4.5.6,
httpClient: org.apache.httpcomponents:httpclient:4.5.6
此设置适用于 Android Gralde 插件 3.1.2,但不适用于 3.4.1。
我的混淆器配置不正确吗?还是我必须更新代码才能使用 CloseableHttpClient?
删除这些 Apache 依赖项并改用 useLibrary "org.apache.http.legacy"
。
两个都加是废话,因为引用和打包哪一个是不确定的
如果 MyAsyncTask
的导入被破坏,它可能引用了 Apache 库。
我有一个 Android AsyncTask,它使用旧版 Apache 进行 HTTP 调用。
当我 运行 非缩小构建变体中的此代码(即未混淆或 sh运行k)时,HTTP 调用成功进行。
一旦我使用 minifyEnabled true
代码就会中断并出现以下错误:
java.lang.RuntimeException: An error occurred while executing doInBackground()
Caused by: java.lang.VerifyError: Verifier rejected class MyAsyncTask:
java.lang.Object MyAsyncTask.doInBackground(java.lang.Object[]) failed to verify:
java.lang.Object MyAsyncTask.doInBackground(java.lang.Object[]):
[0x24] 'this' argument 'Precise Reference:
org.apache.http.impl.client.DefaultHttpClient' not instance of 'Reference:
org.apache.http.impl.client.CloseableHttpClient' (declaration of 'MyAsyncTask' appears in /data/app/org.xx-w1slvEAYxDsAOEktrVoz3A==/base.apk!classes2.dex)
有问题的代码在 doInBackground 方法中,如下所示:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpHead httpHead = new HttpHead("aUrl");
final HttpParams httpParameters = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_VALUE);
HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_VALUE);
HttpResponse response = httpClient.execute(httpHead);
我设置了以下混淆器规则:
-dontwarn org.apache.commons.**
-dontwarn org.apache.http.**
-keep class android.net.http.** { *; }
-keep interface org.apache.** { *; }
-keep enum org.apache.** { *; }
-keep class org.apache.** { *; }
-keep class org.apache.commons.** { *; }
-keep class org.apache.http.** { *; }
-keep class org.apache.harmony.** {*;}
我在 gradle 中使用 useLibrary 'org.apache.http.legacy'
。
我也添加了 apache 依赖项:
httpCore: org.apache.httpcomponents:httpcore:4.4.10,
httpMime: org.apache.httpcomponents:httpmime:4.5.6,
httpClient: org.apache.httpcomponents:httpclient:4.5.6
此设置适用于 Android Gralde 插件 3.1.2,但不适用于 3.4.1。
我的混淆器配置不正确吗?还是我必须更新代码才能使用 CloseableHttpClient?
删除这些 Apache 依赖项并改用 useLibrary "org.apache.http.legacy"
。
两个都加是废话,因为引用和打包哪一个是不确定的
如果 MyAsyncTask
的导入被破坏,它可能引用了 Apache 库。