BluetoothA2dpSink & BluetoothAvrcpController 类 无法访问,如何添加到SDK?

BluetoothA2dpSink & BluetoothAvrcpController classes are not accessible, how to add to SDK?

我的项目需要以下 类 来构建:

根据 & ,类 是 Android SDK 的一部分,但默认情况下被禁用,因为大多数手机不使用这些蓝牙配置文件。我们的设备有一个自定义 ROM,因此这些蓝牙配置文件可以在我们的设备上正常工作。

上述问题的答案表明您可以修改 SDK 以包含缺少的 类,这样 Android Studio 将识别它们并构建。所以我的问题是:

  1. 如何将这些 类 添加到 SDK,即使它们已经存在? (C:\Users\USERNAME\AppData\Local\Android\sdk\sources\android-23\android\bluetooth) 是他们的位置。
  2. 我如何实际修改 SDK 并重新编译它?我找到了 this 个问题,但它是几年前的问题,并且指向的说明也有几年的历史了。

类 似乎不是 public,您可能必须通过反射访问它们(风险自负)。此外,BluetoothA2dpSink 的文档表明:

BluetoothA2dpSink is a proxy object for controlling the Bluetooth A2DP Sink * Service via IPC. Use {@link BluetoothAdapter#getProfileProxy} to get * the BluetoothA2dpSink proxy object.

虽然我的问题非常具体,但经过大量研究后,我发现我正在尝试使用通常被称为隐藏 API 的东西。有一些解决方案。我不熟悉反射,所以我没有使用它。这是我所做的:

  1. 通过从设备中提取 framework.jar 文件来获取您缺少的 classes。所以插入一个设备并使用下面的adb命令:

    adb pull /system/framework/framework.jar
    
  2. framework.jar 文件重命名为 framework.zip 以便您可以打开并解压缩它。从压缩文件中提取 dex 文件。
  3. 使用dex2jar将你的dex文件转换为JAR文件,然后从生成的JAR文件中提取你需要的class文件。您现在拥有缺少的 classes,因此下一步是将其放入您的实际 SDK 中。
  4. 转到 [Your SDK location]\sdk\platforms\[the SDK version you need to compile against]\ 并将 android.jar 文件重命名为 android.zip 并解压缩。
  5. 从 dex2jar 生成的 JAR 文件中复制您需要的提取的 classes 到提取的 android 文件夹中。
  6. 将 android 文件夹压缩备份并将其命名为 android.jar

进一步参考:

This 问题对使用隐藏 API 的一般想法有一般建议。