BluetoothA2dpSink & BluetoothAvrcpController 类 无法访问,如何添加到SDK?
BluetoothA2dpSink & BluetoothAvrcpController classes are not accessible, how to add to SDK?
我的项目需要以下 类 来构建:
BluetoothA2dpSink
BluetoothAvrcpController
根据 & ,类 是 Android SDK 的一部分,但默认情况下被禁用,因为大多数手机不使用这些蓝牙配置文件。我们的设备有一个自定义 ROM,因此这些蓝牙配置文件可以在我们的设备上正常工作。
上述问题的答案表明您可以修改 SDK 以包含缺少的 类,这样 Android Studio 将识别它们并构建。所以我的问题是:
- 如何将这些 类 添加到 SDK,即使它们已经存在? (C:\Users\USERNAME\AppData\Local\Android\sdk\sources\android-23\android\bluetooth) 是他们的位置。
- 我如何实际修改 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 的东西。有一些解决方案。我不熟悉反射,所以我没有使用它。这是我所做的:
通过从设备中提取 framework.jar
文件来获取您缺少的 classes。所以插入一个设备并使用下面的adb命令:
adb pull /system/framework/framework.jar
- 将
framework.jar
文件重命名为 framework.zip
以便您可以打开并解压缩它。从压缩文件中提取 dex 文件。
- 使用dex2jar将你的dex文件转换为JAR文件,然后从生成的JAR文件中提取你需要的class文件。您现在拥有缺少的 classes,因此下一步是将其放入您的实际 SDK 中。
- 转到
[Your SDK location]\sdk\platforms\[the SDK version you need to compile against]\
并将 android.jar
文件重命名为 android.zip
并解压缩。
- 从 dex2jar 生成的 JAR 文件中复制您需要的提取的 classes 到提取的 android 文件夹中。
- 将 android 文件夹压缩备份并将其命名为
android.jar
。
进一步参考:
This 问题对使用隐藏 API 的一般想法有一般建议。
我的项目需要以下 类 来构建:
BluetoothA2dpSink
BluetoothAvrcpController
根据
上述问题的答案表明您可以修改 SDK 以包含缺少的 类,这样 Android Studio 将识别它们并构建。所以我的问题是:
- 如何将这些 类 添加到 SDK,即使它们已经存在? (C:\Users\USERNAME\AppData\Local\Android\sdk\sources\android-23\android\bluetooth) 是他们的位置。
- 我如何实际修改 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 的东西。有一些解决方案。我不熟悉反射,所以我没有使用它。这是我所做的:
通过从设备中提取
framework.jar
文件来获取您缺少的 classes。所以插入一个设备并使用下面的adb命令:adb pull /system/framework/framework.jar
- 将
framework.jar
文件重命名为framework.zip
以便您可以打开并解压缩它。从压缩文件中提取 dex 文件。 - 使用dex2jar将你的dex文件转换为JAR文件,然后从生成的JAR文件中提取你需要的class文件。您现在拥有缺少的 classes,因此下一步是将其放入您的实际 SDK 中。
- 转到
[Your SDK location]\sdk\platforms\[the SDK version you need to compile against]\
并将android.jar
文件重命名为android.zip
并解压缩。 - 从 dex2jar 生成的 JAR 文件中复制您需要的提取的 classes 到提取的 android 文件夹中。
- 将 android 文件夹压缩备份并将其命名为
android.jar
。
进一步参考:
This 问题对使用隐藏 API 的一般想法有一般建议。