1

我正在尝试让 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$**”
4

2 回答 2

1

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

于 2014-07-18T00:57:51.923 回答
0

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

正如您发布的同一线程中所说

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

于 2014-07-17T14:58:59.370 回答