0

在调试(或执行)具有 Android 目标的 Xamarin Forms 应用程序时,我们遇到了阻塞问题。

我们的解决方案包括一个包装 Java JAR 组件的 Android 绑定库项目。该组件是第三方 SDK 的一部分,其目的是连接到用于物流的蓝牙扫描仪设备(Avery Dennison Pathfinder)。

我们现在在调用执行蓝牙连接到设备的方法时面临一个问题:在物理设备上调试时,调试器停止并且设备上的应用程序崩溃并且没有抛出异常。

为了完整起见,这个 jar 还引用了一个已编译的二进制“libcompanion-api.so”,我已将其作为 AndroidNativeLibrary 包含在相关文件夹 lib/armeabi-v7a 和 lib/arm64-v8a 中。

有没有人在 Xamarin 解决方案中使用 JAR 库的项目中遇到过类似的情况?任何对 Xamarin 上的 Avery Dennison 设备有某种经验的人?

我们正在使用 Android 7.1.1 的 Honeywell 设备型号 EDA50-011 上进行部署。在同一设备中,SDK 中包含的原生 android 应用程序可以完美运行。

我们正在尝试移植 xamarin 这些功能。

这是我们的项目结构:

这是我们在 Visual Studio 2019 上的项目

这是日志(adb logcat)

08-04 17:30:47.810 7579 7579 W System.err: SLF4J: 无法加载类“org.slf4j.impl.StaticLoggerBinder”。
08-04 17:30:47.810 7579 7579 W System.err: SLF4J: 默认为无操作 (NOP) 记录器实现
08-04 17:30:47.810 7579 7579 W System.err:SLF4J:有关详细信息,请参阅 http://www.slf4j.org/codes.html#StaticLoggerBinder。
08-04 17:30:47.828 1807 1957 D BluetoothManagerService:消息:20
08-04 17:30:47.829 1807 1957 D BluetoothManagerService:添加回调:android.bluetooth.IBluetoothManagerCallback$Stub$Proxy@6b28298:true
08-04 17:30:47.831 7579 7579 I CompanionAPI:这是 0x8f805e00,mp_DataAvailableKey 是 0x8f284f0c,ip_DataAvailableKey 是 0x8f284f0c,mpDataRead 是 0x8f284f1d,ipDataRead 是 0x8f284f1d
08-04 17:30:47.834 7579 7615 W:线程 0x8edcc920 可能已过早完成
08-04 17:30:47.834 7579 7615 E : * 断言在 /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mono/utils/mono-threads.c:650,条件`信息'未满足,功能:mono_thread_info_current,
08-04 17:30:47.834 7579 7615 F libc:致命信号 6(SIGABRT),tid 7615(线程 4)中的代码 -6
08-04 17:30:47.835 236 236 W:调试器:处理请求:pid=7579 uid=10142 gid=10142 tid=7615
08-04 17:30:47.916 7616 7616 F 调试:*** *** *** *** *** *** *** *** *** *** *** * ** *** *** ***
08-04 17:30:47.916 7616 7616 F 调试:构建指纹:'Honeywell/eda50/eda50-011:7.1.1/NMF26F/207.01.00.0016:user/release-keys'
08-04 17:30:47.916 7616 7616 F 调试:修订:“0”
08-04 17:30:47.916 7616 7616 F 调试:ABI:“手臂”
08-04 17:30:47.916 7616 7616 F 调试:pid:7579,tid:7615,名称:Thread-4 com.companyname.priceretriever_assess
08-04 17:30:47.916 7616 7616 F 调试:信号 6 (SIGABRT),代码 -6 (SI_TKILL),故障地址 --------
08-04 17:30:47.916 7616 7616 F 调试:r0 00000000 r1 00001dbf r2 00000006 r3 00000008
08-04 17:30:47.916 7616 7616 F 调试:r4 8edcc978 r5 00000006 r6 8edcc920 r7 0000010c
08-04 17:30:47.916 7616 7616 F 调试:r8 8f805f00 r9 8edcb9f8 sl b01bc008 fp 8edcb500
08-04 17:30:47.916 7616 7616 F 调试:ip 00000000 sp 8edcb490 lr b017a4f7 pc b017cd78 cpsr 200d0010
08-04 17:30:47.929 7616 7616 F 调试:
08-04 17:30:47.929 7616 7616 F 调试:回溯:
08-04 17:30:47.929 7616 7616 F 调试:#00 pc 00049d78 /system/lib/libc.so (tgkill+12)
08-04 17:30:47.930 7616 7616 F 调试:#01 pc 000474f3 /system/lib/libc.so (pthread_kill+34)
08-04 17:30:47.930 7616 7616 F 调试:#02 pc 0001d745 /system/lib/libc.so (raise+10)
08-04 17:30:47.930 7616 7616 F 调试:#03 pc 00019281 /system/lib/libc.so (__libc_android_abort+34)
08-04 17:30:47.930 7616 7616 F 调试:#04 pc 000172e8 /system/lib/libc.so (abort+4)
08-04 17:30:47.931 7616 7616 F 调试:#05 pc 0001d9f7 /data/app/com.companyname.priceretriever_assess-1/lib/arm/libmonodroid.so (_ZN7xamarin7android8internal16MonodroidRuntime16mono_log_handlerEPKcS4_S4_iPv+66)
08-04 17:30:47.932 7616 7616 F 调试:#06 pc 002c19ec /data/app/com.companyname.priceretriever_assess-1/lib/arm/libmonosgen-2.0.so (eglib_log_adapter+276)
08-04 17:30:47.935 2289 2289 D wpa_supplicant:wlan0:控制接口命令“SIGNAL_POLL”
08-04 17:30:47.946 2289 2289 D wpa_supplicant:CTRL-DEBUG:global_ctrl_sock-sendto:sock=8 sndbuf=163840 outq=0 send_len=48
08-04 17:30:48.233 1807 1954 I BootReceiver:将 /data/tombstones/tombstone_00 复制到 DropBox (SYSTEM_TOMBSTONE)
08-04 17:30:48.242 236 236 W:调试器:恢复目标 7579
08-04 17:30:48.243 1807 7617 W ActivityManager:强制完成活动 com.companyname.priceretriever_assess/crc64a1b8bf213c986bea.MainActivity
08-04 17:30:48.249 1807 7617 D ActivityTrigger: ActivityTrigger activityPauseTrigger
08-04 17:30:48.250 1807 7617 W ActivityManager:强制完成活动 com.companyname.priceretriever_assess/crc64a1b8bf213c986bea.MainActivity
08-04 17:30:48.250 1807 7617 W ActivityManager: ActivityRecord {d42e049 u0 com.companyname.priceretriever_assess/crc64a1b8bf213c986bea.MainActivity t707 f} 的重复完成请求
08-04 17:30:48.256 1807 1899 V BoostFramework:BoostFramework():mPerf = com.qualcomm.qti.Performance@2c1ca62
08-04 17:30:48.256 1807 1899 V BoostFramework:BoostFramework():mPerf = com.qualcomm.qti.Performance@1f937f3
08-04 17:30:48.259 1807 1899 V BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@c823729
08-04 17:30:48.259 1807 1899 V BoostFramework:BoostFramework():mPerf = com.qualcomm.qti.Performance@2f62aae
08-04 17:30:48.302 1807 10056 I OpenGLRenderer:初始化 EGL,版本 1.4
08-04 17:30:48.302 1807 10056 D OpenGLRenderer:交换行为 1
08-04 17:30:48.334 1807 2970 I ActivityManager: Process com.companyname.priceretriever_assess (pid 7579) has dead
08-04 17:30:48.334 1807 2970 D ActivityManager:cleanUpApplicationRecord -- 7579
08-04 17:30:48.334 309 309 I Zygote:由于信号 (6) 退出进程 7579
08-04 17:30:49.480 7628 7628 D AndroidRuntime: START com.android.internal.os.RuntimeInit uid 2000
08-04 17:30:49.487 7628 7628 D AndroidRuntime: CheckJNI 关闭
08-04 17:30:49.573 7628 7628 W main : type=1400 audit(0.0:3646): avc: denied { read } for name="name" dev="sysfs" ino=10676 scontext=u:r:shell :s0 tcontext=u:object_r:sysfs:s0 tclass=文件许可=0
08-04 17:30:49.585 7628 7628 我 libmdmdetect:不支持 ESOC 框架
08-04 17:30:49.585 7628 7628 E libmdmdetect:无法打开 /sys/bus/msm_subsys/devices/subsys0/name:权限被拒绝
08-04 17:30:49.604 7628 7628 D ICU:未找到时区覆盖文件:/data/misc/zoneinfo/current/icu/icu_tzdata.dat
08-04 17:30:49.623 7628 7628 W 主要:类型=1400 审核(0.0:3647):avc:拒绝{读取}名称=“u:object_r:honeywell_prop:s0”dev=“tmpfs”ino=7209 scontext =u:r:shell:s0 tcontext=u:object_r:honeywell_prop:s0 tclass=文件许可=0
08-04 17:30:49.633 7628 7628 E libc:访问被拒绝找到属性“ro.hsm.gms”
08-04 17:30:49.651 7628 7628 I Radio-JNI: register_android_hardware_Radio DONE
08-04 17:30:49.675 7628 7628 D AndroidRuntime:调用主条目 com.android.commands.am.Am
08-04 17:30:49.694 1807 2894 I ActivityManager: 强制停止 com.companyname.priceretriever_assess appid=10142 user=0: from pid 7628
08-04 17:30:49.700 7628 7628 D AndroidRuntime:关闭 VM

我们的代码非常简单:

String deviceSerial = "6140 13081507";
String deviceAddress = "00:07:80:6E:50:92";
String deviceInfo = "6140 13081507 00:07:80:6E:50:92";

DeviceConnectionInfo ConnectionInfo = new DeviceConnectionInfo(deviceSerial, deviceAddress, Avd.Api.Core.ConnectionType.Bluetooth);

try {
   DeviceManager deviceManager = new DeviceManager();
   var devices = deviceManager.GetAvailableDevices(ConnectionType.Bluetooth, 5000);
   IDevice device = deviceManager.CreateDevice(ConnectionInfo);
}
catch (Exception ex) {
   throw ex;
}

当我越过 deviceManager.CreateDevice(ConnectionInfo) 应用程序崩溃。

请帮助我们,我们已经陷入这种阻塞情况的几天。谢谢

4

0 回答 0