我正试图获得与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有什么想法吗?
My attempts so far:
- 新增"-keep class org.electricwisdom"。**"one_answers"-keep class com.woodblockwithoutco."。* *"到我的proguard文件,因为这两个是RemoteMetadataProvider库的包名,该库实现了API 14-18的RemoteController API
- 添加"-keep *"实现android.media。IRemoteControlDisplay" and/or "-keep *扩展android.media。IRemoteControlDisplay$Stub"到我的proguard文件
- 增加"-keep class android.media.IRemoteControlDisplay$**"
解决了我的问题:加上"-保持班"。**"one_answers"-保持接口org.electricwisdom。
你是否检查过你使用的是正确的android版本,带有v18后缀的文件适用于android 4.3,没有v18后缀的文件适用于android 4.2.2及以下版本
就像在你发布
的同一帖子中所说的那样请不要交叉使用这些库,否则您将获得RuntimeException(在getInstance()方法中)或AbstractMethodError(如果您以某种方式获得RemoteMetadataProvider的实例而没有调用getInstance())。