2017-05-03 9 views
1

的项目我的团队目前正在对需要下列类来构建:BluetoothA2dpSink&BluetoothAvrcpController不可访问,如何添加到SDK?

BluetoothA2dpSink

BluetoothAvrcpController

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

上述问题的答案表示您可以使用缺失的类修改SDK,以便Android Studio能够识别它们。所以我的问题是:

  1. 如何将这些类添加到SDK中,即使它们已经存在? (C:\ Users \ USERNAME \ AppData \ Local \ Android \ sdk \ sources \ android-23 \ android \ bluetooth)是它们的位置。
  2. 我该如何修改SDK并重新编译它?我发现了this的问题,但它来自几年前,并指出几年前的指示。

谢谢。

回答

0

尽管我的问题非常具体,经过大量研究后,我发现我试图使用通常被称为隐藏API的东西。有几个解决方案。我不熟悉反射,所以我没有使用它。下面是我做的,而不是:

  1. 获取,你通过从设备拉动framework.jar文件丢失的类。所以插上设备,并使用以下ADB命令:

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

更多参考:

This问题对使用隐藏的API的总体思路一般建议。

This网站,虽然很老,但有一个非常体面的教程,遵循我在这里描述的一般过程。

1

看起来这些课程并非公开的,您可能需要通过反思访问它们(由您自己承担风险)。此外,对于BluetoothA2dpSink的文件表明:

BluetoothA2dpSink是用于控制代理对象蓝牙A2DP水槽 *通过IPC服务。使用{@link BluetoothAdapter#getProfileProxy}获取BluetoothA2dpSink代理对象 *。