我们正试图升级爱普生的SDK,这是很长一段时间以来一直不推荐的。
我们使用的是旧的ePOS打印SDK (com.epson.eposprint)包,并且开始出现问题,因此我们正确地决定迁移到当前的ePOS SDK (com.epson.epos2)。
我们正在使用。
我们遵循SDK中包含的迁移文档。替换了大部分代码。但是,似乎要么是Xamarin存在java绑定问题,要么是缺少了什么,因为几乎90%的枚举值是不可用的。如果没有枚举值就几乎不可能正确调用方法..。例如,我们确实有一些可用的枚举(比如BatteryLevelX、TMxx、Pattern*),但仅此而已。
我们正在使用Android8.0
我们的javabinding项目配置如下:
--JarLibrary
----Jars
-------ePOS2.jar
-------ePOSEasySelect.jar
----libs
------armeabi
--------libepos2.so
--------libeposeasyselect.so
------armeabi-v7a
--------libepos2.so
--------libeposeasyselect.so项目属性:
Android解析器: 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>发布于 2019-03-21 16:46:07
编辑:解决方案是确保在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>发布于 2020-04-01 11:07:56
对于那些仍在努力解决这个问题的人,我找到了一种解决方案,似乎可以在不重写库的情况下完成任务。
您应该得到一个库,您可以从其他项目中引用这个库,并使用Com.Epson.Epos2命名空间及其中的所有类。
作为参考,大多数有用的常量都是通过Com.Epson.Eposdevice namespace访问的。例如Com.Epson.Eposdevice.Printer.Printer.LangEn
注意:没有默认的DiscoveryListener类,所以如果沿着这条路线前进,就需要构建自己的类。
同样值得记住的是,大多数Java项目的方法名称都使用camelCaseFormatting,所以当从文档中复制/粘贴示例(这很糟糕)时,不要忘记将您的方法更改为TitleCaseFormatting。
此外,我还不断地得到一个错误与global::Com.Epson.Epos2.Printer.LogoKeyCode不存在的任何原因。临时解决方案是将以下行添加到绑定库的MetaData.xml文件夹中的Transforms文件中:
<remove-node path="/api/package[@name='com.epson.epos2.printer']/class[@name='Printer']/method[@name='getLogoList' and count(parameter)=0]"/>https://stackoverflow.com/questions/52166161
复制相似问题