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>
对于仍在为此苦苦挣扎的任何人,我找到了一个似乎无需重写库即可完成工作的解决方案。
- 在您的解决方案中,创建一个新的 "Android Bindings Library (Xamarin)" 项目。
- 将 ePOS2.jar(和 ePOSEasySelect.jar 如果需要)文件添加到 "Jars" 文件夹并将文件的构建操作(在属性 window 中)设置为 "EmbeddedJar".
- 从 Epson ePOS SDK for Android download.
在本地 (OPOS_CCOs_1.14.001.msi) 安装 OPOS 通用控制对象 (CCO)
- 将步骤 1 中生成的所有 .dll 文件复制到您的项目中。我在其中使用了一个 "lib" 文件夹,但您也这样做了。
- 引用项目中的 .dll。
- 建造。
您应该最终得到一个可以从其他项目引用的库,并使用 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]"/>
我们正在尝试升级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>
对于仍在为此苦苦挣扎的任何人,我找到了一个似乎无需重写库即可完成工作的解决方案。
- 在您的解决方案中,创建一个新的 "Android Bindings Library (Xamarin)" 项目。
- 将 ePOS2.jar(和 ePOSEasySelect.jar 如果需要)文件添加到 "Jars" 文件夹并将文件的构建操作(在属性 window 中)设置为 "EmbeddedJar".
- 从 Epson ePOS SDK for Android download. 在本地 (OPOS_CCOs_1.14.001.msi) 安装 OPOS 通用控制对象 (CCO)
- 将步骤 1 中生成的所有 .dll 文件复制到您的项目中。我在其中使用了一个 "lib" 文件夹,但您也这样做了。
- 引用项目中的 .dll。
- 建造。
您应该最终得到一个可以从其他项目引用的库,并使用 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]"/>