我正在尝试让 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
- 在我的 proguard 文件中添加“-keep * implements android.media.IRemoteControlDisplay”和/或“-keep * extends android.media.IRemoteControlDisplay$Stub”
- 添加“-keep class android.media.IRemoteControlDisplay$**”