Android应用程序在proguard混淆后崩溃(Google plus people search)
问题描述:
我在我的应用程序中添加了一些代码来搜索Google Plus上的用户。没有Proguard,这个代码运行良好。运行proguard以混淆代码后,我的应用在搜索google plus上的用户时崩溃。Android应用程序在proguard混淆后崩溃(Google plus people search)
09-14 10:21:51.346: E/AndroidRuntime(12527): FATAL EXCEPTION: AsyncTask #4
09-14 10:21:51.346: E/AndroidRuntime(12527): Process: com.mapegames.sudokukings, PID: 12527
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:864)
Caused by: java.lang.NullPointerException
at com.google.api.client.util.Types.getActualParameterAtPosition(SourceFile:327)
at com.google.api.client.util.Types.getIterableParameter(SourceFile:307)
at com.google.api.client.http.HttpHeaders.parseHeader(SourceFile:1158)
at com.google.api.client.http.HttpHeaders.fromHttpResponse(SourceFile:989)
at com.google.api.client.http.HttpResponse.<init>(SourceFile:148)
at com.google.api.client.http.HttpRequest.execute(SourceFile:969)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(SourceFile:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(SourceFile:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(SourceFile:460)
at com.mapegames.sudokukings.PlayersActivity$getPeople.doInBackground(SourceFile:904)
at com.mapegames.sudokukings.PlayersActivity$getPeople.doInBackground(SourceFile:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
我试图保持的类,在其中都涉及到google.api.sevices.plus ProGuard的配置文件,但这不起作用。
-keep class com.mapegames.sudokukings.** { *; }
-keep class com.google.api.client.** { *; }
-keep class com.google.api.services.plus.** { *; }
-keep class com.google.api.services.plus.model.** { *; }
-keep class java.lang.** { *; }
-keep class android.os.** { *; }
看起来错误发生在下面的代码中的以下执行“src [0] .execute()”。
import com.google.api.services.plus.Plus;
import com.google.api.services.plus.model.PeopleFeed;
private Plus.People.Search searchPeople;
private void searchPeople(String name) throws IOException {
searchPeople = plusSvc.people().search(name);
searchPeople.setMaxResults(5L);
status.setText(getString(R.string.searching) + " 10%");
Log.i(TAG, "searchPeople: " + searchPeople);
new getPeople().execute(searchPeople);
}
private class getPeople extends AsyncTask<Plus.People.Search, Void, PeopleFeed> {
public PeopleFeed doInBackground(Plus.People.Search... src) {
Log.i(TAG, "Start PeopleSearch");
try {
Log.i(TAG, "Try PeopleSearch: " + src[0]);
return src[0].execute();
} catch (IOException e) {
Log.i(TAG, "Catch PeopleSearch");
e.printStackTrace();
return null;
}
}
protected void onPostExecute(PeopleFeed feed) {
Log.i(TAG, "Set PeopleSearch");
setPeople(feed);
}
}
我的日志文件的最后几行显示错误发生在“src [0] .execute()”。上述
09-13 13:17:14.170: I/PL(2881): searchPeople: {b=yhb, f=5, key=AIzaSyAfaXmYlCopeZuV-Rk5rdwGOBP3Pdkp24o}
09-13 13:17:14.170: I/PL(2881): Start PeopleSearch
09-13 13:17:14.170: I/PL(2881): Try PeopleSearch: {b=yhb, f=5, key=AIzaSyAfaXmYlCopeZuV-Rk5rdwGOBP3Pdkp24o}
林不知道这个信息是足够足够了,所以请让当需要更多的信息我知道。
答
你可以尝试:
-keep class com.google.api.services.plus.** { *; }
您还可以检查什么得到通过看the proguard output files.
编辑带走 - 你的问题可能是类似以下:
- http://softwyer.wordpress.com/2012/10/20/android-google-drive-sdk-and-proguard/
- Google Drive API doesn't play well with ProGuard (NPE)
这些适用于Drive,但是NPE的位置相似,并且它们提供了可以从头开始的工作proguard配置。
谢谢你的回答,但不幸的是它没有奏效。我确实看过proguard输出,但我不确定在哪里寻找。我在seeds.txt中注意到com.google.api.services.plus类未被混淆。你能告诉我我要去哪里找吗? – Mape 2014-09-13 17:29:11
那么,如果谷歌加包没有被混淆,你现在应该有一个更清晰的堆栈跟踪 - 你可以发布? – sfThomas 2014-09-13 17:31:05
是的,我改变了上面的堆栈跟踪。我在proguard配置文件中添加了一些类。 – Mape 2014-09-14 08:38:08