Epson ePOS SDK for Android (Xamarin) 缺少常量

Epson ePOS SDK for Android (Xamarin) missing constants

我们正在尝试升级epson的SDK,这个SDK已经弃用了很长时间。

我们使用的是旧的 ePOS-Print SDK (com.epson.eposprint) 包,我们开始遇到问题,所以我们正确地决定迁移到当前的 Epson ePOS SDK for Android (com.epson.epos2).

我们正在使用 Visual Studio Xamarin.

我们遵循了 SDK 中包含的迁移文档。替换了大部分代码。但是,似乎 Xamarin 的 java 绑定有问题,或者缺少某些东西,因为几乎 90% 的枚举值不可用。如果没有枚举值,几乎不可能正确调用方法...例如,我们确实有一些可用的枚举(如 BatteryLevelX、TMxx、Pattern*),但仅此而已。

我们正在使用 Android 8.0

我们的java绑定项目是这样配置的:

--JarLibrary
----Jars
-------ePOS2.jar
-------ePOSEasySelect.jar
----libs
------armeabi
--------libepos2.so
--------libeposeasyselect.so
------armeabi-v7a
--------libepos2.so
--------libeposeasyselect.so

项目属性:

Android Class 解析器:jar2xml Android代码生成目标:XAJavaInterop1

知道这是为什么吗?

编辑: 解决方案是确保 SDK 中所有没有可见性关键字的对象都用 Metadata.xml 转换文件修复,这样:

<!-- On enlève l'ancienne classe du package qui ne sert plus à rien, juste pour la migration -->
<remove-node path="/api/package[starts-with(@name, 'com.epson.epsonio')]" />

<!-- Need to change the visibility of many ommited classes visibility in jar epos -->
<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='NativeDevice']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.commbox']/class[@name='NativeCommBox']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.commbox']/class[@name='NativeCommBoxManager']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.keyboard']/class[@name='NativeKeyboard']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.printer']/class[@name='NativePrinter']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.scanner']/class[@name='NativeScanner']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.simpleserial']/class[@name='NativeSimpleSerial']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='DeviceInnerImplement']"
      name="visibility">protected</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='NativeDevice']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2.printer']/class[@name='CommonPrinter']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2.printer']/class[@name='LogoKeyCode']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2']/class[@name='NativeInitializer']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2']/class[@name='OutputLog']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.display']/class[@name='NativeDisplay']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='Device.DeleteDeviceCallbackAdapter']"
      name="visibility">protected</attr>

编辑: 解决方案是确保 SDK 中所有没有可见性关键字的对象都用 Metadata.xml 转换文件修复,这样:

<!-- On enlève l'ancienne classe du package qui ne sert plus à rien, juste pour la migration -->
<remove-node path="/api/package[starts-with(@name, 'com.epson.epsonio')]" />

<!-- Need to change the visibility of many ommited classes visibility in jar epos -->
<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='NativeDevice']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.commbox']/class[@name='NativeCommBox']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.commbox']/class[@name='NativeCommBoxManager']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.keyboard']/class[@name='NativeKeyboard']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.printer']/class[@name='NativePrinter']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.scanner']/class[@name='NativeScanner']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.simpleserial']/class[@name='NativeSimpleSerial']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='DeviceInnerImplement']"
      name="visibility">protected</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='NativeDevice']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2.printer']/class[@name='CommonPrinter']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2.printer']/class[@name='LogoKeyCode']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2']/class[@name='NativeInitializer']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.epos2']/class[@name='OutputLog']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice.display']/class[@name='NativeDisplay']"
      name="visibility">public</attr>

<attr path="/api/package[@name='com.epson.eposdevice']/class[@name='Device.DeleteDeviceCallbackAdapter']"
      name="visibility">protected</attr>

对于仍在为此苦苦挣扎的任何人,我找到了一个似乎无需重写库即可完成工作的解决方案。

  1. 在您的解决方案中,创建一个新的 "Android Bindings Library (Xamarin)" 项目。
  2. 将 ePOS2.jar(和 ePOSEasySelect.jar 如果需要)文件添加到 "Jars" 文件夹并将文件的构建操作(在属性 window 中)设置为 "EmbeddedJar".
  3. Epson ePOS SDK for Android download.
  4. 在本地 (OPOS_CCOs_1.14.001.msi) 安装 OPOS 通用控制对象 (CCO)
  5. 将步骤 1 中生成的所有 .dll 文件复制到您的项目中。我在其中使用了一个 "lib" 文件夹,但您也这样做了。
  6. 引用项目中的 .dll。
  7. 建造。

您应该最终得到一个可以从其他项目引用的库,并使用 Com.Epson.Epos2 命名空间和其中的所有 classes。

作为参考,大多数有用的常量都是通过 Com.Epson.Eposdevice namespace 访问的。例如Com.Epson.Eposdevice.Printer.Printer.LangEn

注意:没有默认值 DiscoveryListener class,因此如果您沿用该路线,则需要构建自己的。

还值得记住的是,大多数 Java 项目使用 camelCaseFormatting 作为它们的方法名称,因此当文档中的 copy/pasting 示例(这很糟糕)时,请不要忘记更改您的TitleCaseFormatting.

的方法

另外,另外:我总是收到 global::Com.Epson.Epos2.Printer.LogoKeyCode 不存在的错误,无论出于何种原因。临时解决方案是将以下行添加到绑定库 Transforms 文件夹中的 MetaData.xml 文件:

  <remove-node path="/api/package[@name='com.epson.epos2.printer']/class[@name='Printer']/method[@name='getLogoList' and count(parameter)=0]"/>