1

目标如下:为使用蓝牙 LE 与其他 BTLE 设备通信的 HTC 手机创建一个 Android 应用程序 (Android 4.2)。我必须使用 HTC 专有的蓝牙 LE java 库。

我做了以下事情:

  • 创建了一个使用“com.htc.android.bluetooth.le.gatt.jar”和“com.broadcom.bt.jar”文件的 Java 绑定库项目。这按预期输出(我相信),没有修改 Metadata.xaml 等。

  • 创建了一个 Android 类库,基本上将所有 java 绑定方法转换为更友好的方法(即发现 LE 设备,提供它们的列表,所有简单的连接,读/写它们)。这个项目构建得很好。我在这个项目中引用了绑定库中输出的 DLL。

  • 创建了一个 Android 应用程序(Android 4.2;我会使用 4.3 并完成此操作,但这不是目标)。本应用参考上述Android Class 库使用。

问题:一旦我尝试构建,就会收到各种错误:

package com.htc.android.bluetooth.le.gatt does not exist
Line 5 : "extends com.htc.android.bluetooth.le.gatt.BleClientProfile"
    in HTCBleClientProfile.java

它实际上抱怨所有输出的java文件。与正在扩展的内容略有不同。

所以我想,如果我只是移动绑定项目创建的生成的 java 文件呢?我这样做了,并且引用正确所需的所有工作,但最终出现了不同的错误。

我做的第一件事是移动生成的类文件。所有类都具有如下属性:

namespace Com.Htc.Android.Bluetooth.LE.Gatt {

// Metadata.xml XPath class reference: path="/api/package[@name='com.htc.android.bluetooth.le.gatt']/class[@name='BleAdapter']"
[global::Android.Runtime.Register ("com/htc/android/bluetooth/le/gatt/BleAdapter", DoNotGenerateAcw=true)]
public partial class BleAdapter : global::Java.Lang.Object {
  /*...*/
}

如果我不理会所有类,则不会在应用程序项目中生成 *.java 文件,从而导致运行时出现“未找到类”错误。

所以我将“DoNoGenerateAcw”调整为 false,这导致 *.java 文件最终生成。

在这一点上,现在我收到了每个构造函数的错误,这些构造函数为我移入的所有这些类接受参数:

Object() in java.lang.object cannot be applied to (com.htc.android.bluetooth.le.gatt.GattID)

这只是众多不同错误之一。但它们在一个方面都是相同的:“java.lang.object 中的 Object() 不能应用于(某种类型)”。所以我一直回到引用 DLL 的点(这导致我回到包错误)。

有谁知道我可以做些什么来解决这个问题?我已通过电子邮件向 Xamarin 发送电子邮件寻求帮助,还向 HTC 发送了一些可能的解决方案(例如 Java 源代码,因此我可以自己将其移植到 C# 以用于此应用程序)。

先感谢您!

4

0 回答 0