我有一个使用youtube.search.list方法的Android应用。在“调试”中以及在“发布”中禁用proguard时,此应用程序正常工作。
当proguard打开时(minifyEnabled为true),当我迭代SearchResult类的列表时,我得到以下异常
com.google.api.client.util.ArrayMap cannot be cast to
com.google.api.services.youtube.model.SearchResult
我在proguard规则中设置了以下规则(根据另一个问题“android proguard makes the youtube api oauth disabled?”中的评论中的建议)
-keep class com.google.api.** {
*;
}
以下是检索List<的代码段。 SearchResult> 。这部分工作正常(searchResultList.size()返回25)。
youtube = new Youtube.builder(new NetHttpTransport(),
new JacksonFactory(),
request->{})
.setApplicationName("youtube-search")
.build();
search = youtube.search()
.list("id,snippet")
.setKey(DeveloperKey.DEVELOPER_KEY)
.setQ("test")
.setMaxResults(25);
SearchListResponse searchResponse = search.execute();
List<SearchResult> searchResultList = searchResponse.getItems()
以下循环将导致错误发生
for (SearchResult r: searchResultList){
// program throws exception only in "RELEASE" with proguard on.
}
任何见解都表示赞赏。
答案 0 :(得分:1)
我遇到与使用proguard构建时相同的问题,我在我的proguard规则中添加了这一行:
-keepattributes Signature
它适用于我。
例如,在处理库时,至少应保留Exceptions,InnerClasses和Signature属性。