我在我的Android应用程序中使用googlePlaces和google Map API,一切正常。当我启用Proguard时,谷歌地图工作正常,但谷歌地方不起作用,它没有返回我的所有搜索请求的结果。看到日志后,我发现代码的一部分不起作用:
try {
HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT);
HttpRequest request = httpRequestFactory
.buildGetRequest(new GenericUrl(PLACES_SEARCH_URL));
request.getUrl().put("key", API_KEY);
request.getUrl().put("location", _latitude + "," + _longitude);
request.getUrl().put("radius", _radius); // in meters
request.getUrl().put("sensor", "false");
if(types != null)
request.getUrl().put("types", types);
PlacesList list = request.execute().parseAs(PlacesList.class);
// Check log cat for places response status
Log.d("Places Status", "" + list.status);
return list;
} catch (HttpResponseException e) {
Log.e("Error:", e.getMessage());
return null;
}
此代码使用proguard版本返回null,并返回正常版本的结果。
我试图保留所有与googlePlaces一起使用的类:
-keep public class com.example.android.mapexample.GooglePlaces
-keep public class com.example.android.mapexample.Place
-keep public class com.example.android.mapexample.PlaceDetails
-keep public class com.example.android.mapexample.PlacesList
但它不起作用。 :/我不知道出了什么问题。
proguard-google-api-client.txt http://textuploader.com/?p=6&id=TAEQI
proguard-project.txt http://textuploader.com/?p=6&id=HFbTF
感谢您的帮助
答案 0 :(得分:4)
使用google map API保留Serializable类后解决了这个问题
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
答案 1 :(得分:0)
很可能由于新版本,建议的答案对我不起作用:
implementation 'com.google.android.libraries.places:places:2.4.0'
implementation 'com.google.maps:google-maps-services:0.15.0'
但这Proguard规则至少在目前是固定的:
-keep class com.google.maps.** { *; }
已报告here