java 爱普生ePOS SDK for Android(Xamarin)缺少常量

7dl7o3gd  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(313)

我们正在尝试升级爱普生的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>
wooyq4lh

wooyq4lh1#

**编辑:**解决方案是确保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>
f4t66c6m

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文件:

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

flseospp3#

此绑定问题的建议解决方案是删除问题元素,而不是调整Transforms/Metadata.xml文件中的修饰符(non-public to public)。有关详细信息,请参阅Microsoft Docs

示例,

  • 从绑定中删除整个非公共类,
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
  • 只从绑定中删除非公共方法,
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />

相关问题