在调试(或执行)具有 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 这些功能。
这是我们的项目结构:
这是日志(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) 应用程序崩溃。
请帮助我们,我们已经陷入这种阻塞情况的几天。谢谢