在Release + Proguard ON时,Android Youtube API V3会抛出异常

时间:2015-07-18 06:57:49

标签: android android-youtube-api youtube-data-api

我有一个使用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.
}

任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我遇到与使用proguard构建时相同的问题,我在我的proguard规则中添加了这一行:

-keepattributes Signature

它适用于我。

来自proguard official site

  

例如,在处理库时,至少应保留Exceptions,InnerClasses和Signature属性。