【发布时间】:2019-02-09 11:30:29
【问题描述】:
我们正在尝试升级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
我们的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>
【问题讨论】:
-
只是为了补充一点,我用java反编译器打开了com.epson.epos2,看起来常量在Printer类继承的抽象类CommonPrinter中。但是,在生成的c#包装类中,打印机类只继承自global::Java.Lang.Object 是不是绑定问题?
-
如果有人可以将此download.epson-biz.com/modules/pos/… 添加到 jar xamarin 项目并使其构建,请告知。
-
@nicolas-belly 你让这个工作了吗?您对
.so文件的构建操作是什么? -
@JonathanPeel 不,我们回滚到旧 SDK
-
@NicolasBelley:你能告诉我这个 SDK 工作正常的版本吗?并为我提供 SDK 以及我无法从 Epson 下载旧的 sdk
标签: java c# xamarin.android epos