Proguard使我的RemoteController compat实现在API< 19设备上崩溃

时间:2014-07-17 13:55:47

标签: java android proguard abstract-methods

我正在尝试使用API​​ 19引入的RemoteController API与API 14+一起使用,因为api已经在那里可用但是隐藏了。到目前为止,我已经完成了所有工作,唯一的问题是,proguard似乎毁掉了我在API< 19设备上的构建,每当我在MicroService.java中初始化RemoteMetadataProvider时会导致AbstractMethodError:

java.lang.AbstractMethodError: abstract method not implemented
        at android.media.IRemoteControlDisplay$Stub.setCurrentClientId(IRemoteControlDisplay.java)
        at android.media.IRemoteControlDisplay$Stub.onTransact(IRemoteControlDisplay.java:65)
        at android.os.Binder.execTransact(Binder.java:367)
        at dalvik.system.NativeStart.run(Native Method)

MicroService.java: https://github.com/tomahawk-player/tomahawk-android/blob/master/src/org/tomahawk/tomahawk_android/services/MicroService.java

我的实施基于DrBreen的本指南/库:http://forum.xda-developers.com/showthread.php?t=2432267

WisdomWolf的统一图书馆我使用:https://github.com/WisdomWolf/UnifiedRemoteMedadataProvider

我的proguard配置文件:https://github.com/tomahawk-player/tomahawk-android/blob/master/proguard-android.txt

当我完全禁用proguard时,一切正常而不会崩溃所以我猜测proguard会以某种方式剥离所需的类/接口。关于如何正确配置proguard的任何想法?

到目前为止我的尝试:

  • 添加" -keep class org.electricwisdom。**"和" -keep class com.woodblockwithoutco。* *"到我的proguard文件,因为这两个是RemoteMetadataProvider库的包名,它实现了API 14-18的RemoteController API
  • 添加" -keep *实现android.media.IRemoteControlDisplay"和/或" -keep *扩展android.media.IRemoteControlDisplay $ Stub"到我的proguard文件
  • 添加" -keep class android.media.IRemoteControlDisplay $ **"

2 个答案:

答案 0 :(得分:1)

这就解决了我的问题: 在我的proguard配置文件中添加“-keep class org.electricwisdom。**”和“-keep interface org.electricwisdom。* *”。

答案 1 :(得分:0)

您是否检查过您使用的是正确的Android版本,带有后缀v18的文件适用于Android 4.3以及没有它的文件适用于Android 4.2.2及更低版本。

正如你在发布的同一个帖子中说的那样

  

请不要交叉使用这个库,否则你将获得RuntimeException(在getInstance()方法中)或AbstractMethodError(如果你以某种方式获取RemoteMetadataProvider的实例而不调用getInstance())。