在proguard混淆之后,应用程序在asynctask(服务器api调用)中崩溃

时间:2015-01-12 13:07:02

标签: android proguard

启动proguard后,当我调用Asynctask(服务器api调用)时崩溃,但如果proguard被禁用则它不会崩溃。在我的应用程序中我正在使用第三方api的Universalimageloader和Multipartentity(Httpmime, httpcore,httpclient)用于将图像发送到服务器,但这些asynctask工作紧挨着崩溃的asynctask。

日志:

01-13 11:58:36.069: E/dalvikvm(6501): Could not find class 'javax.naming.ldap.LdapName', referenced from method a.a.a.e.d.a.b
01-12 18:05:15.247: E/AndroidRuntime(22246): FATAL EXCEPTION: AsyncTask #1
01-12 18:05:15.247: E/AndroidRuntime(22246): Process: com.myapp.package, PID: 22246
01-12 18:05:15.247: E/AndroidRuntime(22246): java.lang.RuntimeException: An error occured while executing doInBackground()
01-12 18:05:15.247: E/AndroidRuntime(22246):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.lang.Thread.run(Thread.java:841)
01-12 18:05:15.247: E/AndroidRuntime(22246): Caused by: java.lang.VerifyError: a/a/a/e/d/a
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.e.d.f.<clinit>(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.c.m.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.a.d(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.a.r(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.a.c(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.a.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.i.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.i.b(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at a.a.a.h.b.i.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at com.myapp.package.aw.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at com.myapp.package.t.a(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at com.myapp.package.t.doInBackground(Unknown Source)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-12 18:05:15.247: E/AndroidRuntime(22246):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-12 18:05:15.247: E/AndroidRuntime(22246):    ... 4 more

Inproguardproject.txt

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses

-dontwarn org.apache.commons.**
-dontwarn org.apache.http.client.HttpClient
-dontwarn javax.naming.**
-dontwarn org.ietf.jgss.**

-dontpreverify
-libraryjars libs/httpmime-4.3.5.jar
-libraryjars libs/httpclient-4.3.5.jar
-libraryjars libs/httpcore-4.3.2.jar
-optimizations !code/simplification/arithmetic,!field

在Asyntask中正在调用服务器

    protected String doInBackground(String... arg0) {
    HttpParams httpParameters = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParameters,
            CONNECTION_ESTABLISH_TIME_OUT);
    HttpConnectionParams.setSoTimeout(httpParameters,
            DATA_WAIT_TIME_OUT);
    mHttpClient = new DefaultHttpClient(httpParameters);
    HttpResponse mHttpResponse = mHttpClient.execute(mHttpGet);
    statusCode = mHttpResponse.getStatusLine().getStatusCode();
    mEntity = mHttpResponse.getEntity();
    String strjson = EntityUtils.toString(mEntity);
    parsingJson(strjson);
    return null;
    }

1 个答案:

答案 0 :(得分:3)

由于proguard更改了http包类文件而发生崩溃。

-keep class org.apache.http.** {
    *;
}
相关问题