启动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;
}
答案 0 :(得分:3)
由于proguard更改了http包类文件而发生崩溃。
-keep class org.apache.http.** {
*;
}