【问题标题】:Android Youtube API V3 cast exception when Release+Proguard ON当 Release+Proguard ON 时 Android Youtube API V3 转换异常
【发布时间】:2015-10-07 22:25:01
【问题描述】:

我有一个使用 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-rules 中设置了以下规则(根据 cmets 在另一个问题“android proguard makes the youtube api oauth disabled?”中的建议)

-keep class com.google.api.** {
    *;
}

以下是检索列表 的代码段。这部分工作正常(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.
}

感谢任何见解。

【问题讨论】:

  • 对我来说,我有 -keepattributes 签名但缺少 -keep class com.google.api.** { *; }

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


【解决方案1】:

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

-keepattributes Signature

它对我有用。

来自proguard official site

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

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 2017-03-08
    • 2014-11-03
    • 2013-10-04
    • 2013-02-07
    • 2013-05-24
    • 2014-08-15
    • 2014-12-12
    相关资源
    最近更新 更多