1

API 19 で導入された RemoteController API を API 14+ で使用できるようにしようとしています。これまでのところすべてが機能するようになりましたが、残っている唯一の問題は、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

私のプロガード設定ファイル: https://github.com/tomahawk-player/tomahawk-android/blob/master/proguard-android.txt

プロガードを完全に無効にすると、クラッシュすることなくすべてが正常に機能するため、プロガードが必要なクラス/インターフェースを何らかの形で取り除いていると推測しています。プロガードを適切に構成する方法についてのアイデアはありますか?

これまでの私の試み:

  • 「-keep class org.electricwisdom.**」と「-keep class com.woodblockwithoutco.* *」をプロガード ファイルに追加します。これら 2 つは、API 14-18 の RemoteController API を実装する RemoteMetadataProvider ライブラリのパッケージ名であるためです。
  • 「-keep * implements android.media.IRemoteControlDisplay」および/または「-keep * extends android.media.IRemoteControlDisplay$Stub」をプロガード ファイルに追加する
  • 「-keep class android.media.IRemoteControlDisplay$**」を追加
4

2 に答える 2