我们正在尝试升级爱普生的SDK,它已经过时很久了。
我们使用的是旧的ePOS-Print SDK(com.epson. epossprint)包,它开始出现问题,所以我们正确地决定迁移到当前的一个,Epson ePOS SDK for Android(com.epson.epos2)。
我们使用的是Visual Studio Xamarin。
我们遵循了SDK中包含的迁移文档。替换了大部分代码。但是,看起来Xamarin的java绑定有问题,或者缺少了一些东西,因为几乎90%的枚举值不可用。没有枚举值几乎不可能正确调用方法...例如,我们确实有一些可用的枚举(如BatteryLevelX、TMxx、模式 *),但仅此而已。
我们使用的是Android 8.0
我们的javabinding项目是这样配置的:
--JarLibrary
----Jars
-------ePOS2.jar
-------ePOSEasySelect.jar
----libs
------armeabi
--------libepos2.so
--------libeposeasyselect.so
------armeabi-v7a
--------libepos2.so
--------libeposeasyselect.so
项目属性:
Android类解析器:jar 2xml Android代码生成器目标:XAJava互操作性1
你知道为什么吗?
**编辑:**解决方案是确保SDK中所有没有可见性关键字的对象都已通过Metadata.xml Transforms文件修复,方法如下:
<!-- 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>
3条答案
按热度按时间wooyq4lh1#
**编辑:**解决方案是确保SDK中所有没有可见性关键字的对象都已通过Metadata.xml Transforms文件修复,方法如下:
f4t66c6m2#
对于任何仍在为此而挣扎的人,我已经找到了一个解决方案,似乎不用重写库就可以完成这项工作。
1.在您的解决方案中,创建一个新的"Android绑定库(Xamarin)"项目。
1.将ePOS2.jar(如果需要,还可添加ePOSEasySelect.jar)文件添加到"Jars"文件夹,并将文件的构建操作(在属性窗口中)设置为"EmbeddedJar"。
1.从Epson ePOS SDK for Android download本地安装OPOS通用控制对象(CCO)(OPOS_CCOs_1.14.001.msi)。
1.从第1步开始,将所有生成的. dll文件复制到项目中。我在其中使用了"lib"文件夹,但您需要这样做。
1.引用项目中的. dll。
1.建造。
最后应该得到一个可以从其他项目引用的库,并利用
Com.Epson.Epos2
名称空间和其中的所有类。作为参考,大多数有用的常量都是通过
Com.Epson.Eposdevice namespace
访问的,例如Com.Epson.Eposdevice.Printer.Printer.LangEn
注意:没有默认的
DiscoveryListener
类,因此如果您继续使用该方法,则需要构建自己的类。同样值得记住的是,大多数Java项目使用
camelCaseFormatting
作为它们的方法名,因此当从文档中复制/粘贴示例时(这很糟糕),不要忘记将方法更改为TitleCaseFormatting
。还有,还有:我总是收到一个错误,不管什么原因
global::Com.Epson.Epos2.Printer.LogoKeyCode
不存在。一个临时的解决方案是将下面的行添加到Bindings Library的Transforms
文件夹中的MetaData.xml
文件:flseospp3#
此绑定问题的建议解决方案是删除问题元素,而不是调整
Transforms/Metadata.xml
文件中的修饰符(non-public to public)。有关详细信息,请参阅Microsoft Docs。示例,