【问题标题】:UsbDeviceConnection requestWait() native crashUsbDeviceConnection requestWait() 本机崩溃
【发布时间】:2014-07-14 11:51:13
【问题描述】:

我正在使用我想从 2 个线程进行通信的设备的 2 个中断端点(IN 和 OUT):

一个通过 OUT 端点初始化的 UsbRequest 对数据包进行排队的 WriteThread(这是从我的应用程序到设备的通信)

一个 ReadThread,它通过一个初始化 IN 端点的 UsbRequest 从设备读取数据(这是从设备到我的应用程序的通信)

我这样做是因为 UsbDeviceConnection.requestWait() 阻塞了 ReadThread 线程,我需要能够同时读写。 问题是当我尝试同时读写时,我的应用程序崩溃了。崩溃似乎发生在 requestWait() 方法中,具有以下堆栈跟踪。我注意到,如果我在某些手机上使用 Thead.sleep(100) 会使崩溃消失,但在其他手机上,即使我使用更大的延迟,崩溃仍然会发生,所以 sleep 方法不可行解决方案。 我想知道你们中是否有人遇到过同样的问题,你们是如何克服的。

我已经看过这个帖子了:

UsbRequest.queue crashing Android 3.1 application

但我需要使用中断的端点,我正在为其编写应用程序的设备没有批量端点,因此我无法执行他们在上面链接中所说的解决方法。

在其下方是崩溃的堆栈跟踪。

07-03 17:55:11.991: E/dalvikvm(28658): JNI ERROR (app bug): accessed stale global reference 0x7ad003fa (index 254 in a table of size 254)
07-03 17:55:11.991: E/dalvikvm(28658): VM aborting
07-03 17:55:11.991: A/libc(28658): Fatal signal 6 (SIGABRT) at 0x00006ff2 (code=-6), thread 28784 (ReadThread)
07-03 17:55:12.101: I/DEBUG(258): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-03 17:55:12.101: I/DEBUG(258): Build fingerprint: 'samsung/hltexx/hlte:4.4.2/KOT49H/N9005XXUEND3:user/release-keys'
07-03 17:55:12.101: I/DEBUG(258): Revision: '8'
07-03 17:55:12.101: I/DEBUG(258): pid: 28658, tid: 28784, name: ReadThread  >>>  <<<
07-03 17:55:12.101: I/DEBUG(258): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
07-03 17:55:12.221: I/DEBUG(258):     r0 00000000  r1 00007070  r2 00000006  r3 00000000
07-03 17:55:12.221: I/DEBUG(258):     r4 00000006  r5 00000016  r6 00007070  r7 0000010c
07-03 17:55:12.221: I/DEBUG(258):     r8 00000000  r9 42bf1850  sl 737df400  fp 42bf3cf0
07-03 17:55:12.221: I/DEBUG(258):     ip 00000001  sp 77d44880  lr 400dd1ad  pc 400ec154  cpsr 000f0010
07-03 17:55:12.221: I/DEBUG(258):     d0  0000000000000000  d1  0000000000000000
07-03 17:55:12.221: I/DEBUG(258):     d2  0000000000000000  d3  0000000000000000
07-03 17:55:12.221: I/DEBUG(258):     d4  0000000000000000  d5  0000000000000000
07-03 17:55:12.221: I/DEBUG(258):     d6  0000000000000000  d7  0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d8  0000000000000000  d9  0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d10 0000000000000000  d11 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d12 0000000000000000  d13 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d14 0000000000000000  d15 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d16 61742061206e6920  d17 7320666f20656c62
07-03 17:55:12.231: I/DEBUG(258):     d18 0000000000000000  d19 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d20 0000000000000000  d21 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d22 0000000000000000  d23 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d24 3fc74721cad6b0ed  d25 3fc2f112df3e5244
07-03 17:55:12.231: I/DEBUG(258):     d26 40026bb1bbb55516  d27 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d28 0000000000000000  d29 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     d30 0000000000000000  d31 0000000000000000
07-03 17:55:12.231: I/DEBUG(258):     scr 20000010
07-03 17:55:12.231: I/DEBUG(258): backtrace:
07-03 17:55:12.231: I/DEBUG(258):     #00  pc 00022154  /system/lib/libc.so (tgkill+12)
07-03 17:55:12.231: I/DEBUG(258):     #01  pc 000131a9  /system/lib/libc.so (pthread_kill+48)
07-03 17:55:12.231: I/DEBUG(258):     #02  pc 000133bd  /system/lib/libc.so (raise+10)
07-03 17:55:12.231: I/DEBUG(258):     #03  pc 000120f3  /system/lib/libc.so
07-03 17:55:12.231: I/DEBUG(258):     #04  pc 00021a08  /system/lib/libc.so (abort+4)
07-03 17:55:12.231: I/DEBUG(258):     #05  pc 000493bf  /system/lib/libdvm.so (dvmAbort+78)
07-03 17:55:12.231: I/DEBUG(258):     #06  pc 0002af2c  /system/lib/libdvm.so (IndirectRefTable::get(void*) const+216)
07-03 17:55:12.231: I/DEBUG(258):     #07  pc 0004dcd3  /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+62)
07-03 17:55:12.231: I/DEBUG(258):     #08  pc 000519f1  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+600)
07-03 17:55:12.231: I/DEBUG(258):     #09  pc 00000214  /dev/ashmem/dalvik-jit-code-cache (deleted)
07-03 17:55:12.231: I/DEBUG(258): stack:
07-03 17:55:12.231: I/DEBUG(258):          77d44840  000000fe  
07-03 17:55:12.231: I/DEBUG(258):          77d44844  7757bfa8  
07-03 17:55:12.231: I/DEBUG(258):          77d44848  00000001  
07-03 17:55:12.231: I/DEBUG(258):          77d4484c  00000000  
07-03 17:55:12.231: I/DEBUG(258):          77d44850  42bf1850  /dev/ashmem/dalvik-heap (deleted)
07-03 17:55:12.231: I/DEBUG(258):          77d44854  737df400  
07-03 17:55:12.231: I/DEBUG(258):          77d44858  42bf3cf0  /dev/ashmem/dalvik-heap (deleted)
07-03 17:55:12.231: I/DEBUG(258):          77d4485c  400f0501  /system/lib/libc.so (snprintf+80)
07-03 17:55:12.231: I/DEBUG(258):          77d44860  61fcd7f8  /dev/ashmem/dalvik-bitmap-2 (deleted)
07-03 17:55:12.231: I/DEBUG(258):          77d44864  000155fe  
07-03 17:55:12.231: I/DEBUG(258):          77d44868  77d448dc  [stack:28784]
07-03 17:55:12.231: I/DEBUG(258):          77d4486c  00000000  
07-03 17:55:12.231: I/DEBUG(258):          77d44870  00000000  
07-03 17:55:12.231: I/DEBUG(258):          77d44874  40118394  
07-03 17:55:12.231: I/DEBUG(258):          77d44878  00004000  
07-03 17:55:12.231: I/DEBUG(258):          77d4487c  77d448ea  [stack:28784]
07-03 17:55:12.231: I/DEBUG(258):     #00  77d44880  00000006  
07-03 17:55:12.231: I/DEBUG(258):          77d44884  00000016  
07-03 17:55:12.231: I/DEBUG(258):          77d44888  00007070  
07-03 17:55:12.241: I/DEBUG(258):          77d4488c  00000001  
07-03 17:55:12.241: I/DEBUG(258):          77d44890  00000001  
07-03 17:55:12.241: I/DEBUG(258):          77d44894  400dd1ad  /system/lib/libc.so (pthread_kill+52)
07-03 17:55:12.241: I/DEBUG(258):     #01  77d44898  00000006  
07-03 17:55:12.241: I/DEBUG(258):          77d4489c  00000000  
07-03 17:55:12.241: I/DEBUG(258):          77d448a0  7757bfa8  
07-03 17:55:12.241: I/DEBUG(258):          77d448a4  400dd3c1  /system/lib/libc.so (raise+14)
07-03 17:55:12.241: I/DEBUG(258):     #02  77d448a8  77d448b4  [stack:28784]
07-03 17:55:12.241: I/DEBUG(258):          77d448ac  400dc0f7  /system/lib/libc.so
07-03 17:55:12.241: I/DEBUG(258): memory near r1:
07-03 17:55:12.241: I/DEBUG(258):     00007050 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007060 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007070 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007080 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007090 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070a0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070b0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070c0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070d0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070e0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070f0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007100 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007110 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007120 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007130 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007140 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258): memory near r6:
07-03 17:55:12.241: I/DEBUG(258):     00007050 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007060 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007070 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007080 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007090 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070a0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070b0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070c0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070d0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070e0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     000070f0 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007100 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007110 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007120 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007130 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.241: I/DEBUG(258):     00007140 ffffffff ffffffff ffffffff ffffffff  
07-03 17:55:12.251: I/DEBUG(258): memory near r9:
07-03 17:55:12.251: I/DEBUG(258):     42bf1830 00000000 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1840 00000000 00000000 000000f8 0000001a  
07-03 17:55:12.251: I/DEBUG(258):     42bf1850 417eb538 00000000 42befd38 77562210  
07-03 17:55:12.251: I/DEBUG(258):     42bf1860 00000000 000000d9 42bef820 429ef108  
07-03 17:55:12.251: I/DEBUG(258):     42bf1870 53b56e9f 00000000 00001000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1880 00000000 00000000 53b56e9d 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1890 0000000b 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf18a0 0016d0ea 00000000 0000bd02 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf18b0 53b56e9f 00000000 00000001 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf18c0 000021b0 000003fa 000003e8 0000001b  
07-03 17:55:12.251: I/DEBUG(258):     42bf18d0 41779800 00000000 00000004 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf18e0 0b0a0908 0000005b 41779800 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf18f0 00000041 00000000 00000801 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1900 00000000 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1910 00000000 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf1920 00000000 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258): memory near sl:
07-03 17:55:12.251: I/DEBUG(258):     737df3e0 0b1afd31 00000b0a 00000000 0000045b  
07-03 17:55:12.251: I/DEBUG(258):     737df3f0 6e6ffb4a 7757bfa8 6d6fc0a8 6f3ea000  
07-03 17:55:12.251: I/DEBUG(258):     737df400 7ad003fa 77562210 77d44c40 00000000  
07-03 17:55:12.251: I/DEBUG(258):     737df410 77d44c94 0000000c 00000000 416a9d40  
07-03 17:55:12.251: I/DEBUG(258):     737df420 00000000 00000000 6c9f4170 77578300  
07-03 17:55:12.251: I/DEBUG(258):     737df430 00000000 00000000 00000001 00004000  
07-03 17:55:12.251: I/DEBUG(258):     737df440 00000000 77766e70 416a9d40 416aec80  
07-03 17:55:12.251: I/DEBUG(258):     737df450 00000000 416b2d7c 416b2df0 416b2ca0  
07-03 17:55:12.251: I/DEBUG(258):     737df460 416b2cc0 416b2d1c 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     737df470 779e9fc8 00000028 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     737df480 00000000 00000000 00000152 417554ec  
07-03 17:55:12.251: I/DEBUG(258):     737df490 4177c830 6d63fcc0 00000001 777679a8  
07-03 17:55:12.251: I/DEBUG(258):     737df4a0 00000001 00000040 00000200 00000000  
07-03 17:55:12.251: I/DEBUG(258):     737df4b0 00000001 6e6ffb4a 6e6ffb4a 00000002  
07-03 17:55:12.251: I/DEBUG(258):     737df4c0 6e6ffb5a 6d640e28 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     737df4d0 00000000 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258): memory near fp:
07-03 17:55:12.251: I/DEBUG(258):     42bf3cd0 00000005 00000004 6da39a98 ffc03c00  
07-03 17:55:12.251: I/DEBUG(258):     42bf3ce0 77414f61 00000000 00000000 0000006b  
07-03 17:55:12.251: I/DEBUG(258):     42bf3cf0 42bf3c48 00000000 429ffbf0 42bf5510  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d00 41787da0 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d10 42bf3d58 00000000 42bf4fe8 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d20 00006dd3 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d30 00000005 00000001 00000001 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d40 42bf1850 42bf5500 42bf3a30 42bf3f00  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d50 00000001 0000001b 41787aa8 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d60 00000000 41787560 00000000 00000043  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d70 41823bc0 00000000 00000000 00000000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d80 00000000 00000000 00001000 00001000  
07-03 17:55:12.251: I/DEBUG(258):     42bf3d90 ffffffff 00000000 41825cc0 42a7aea8  
07-03 17:55:12.251: I/DEBUG(258):     42bf3da0 00000000 00000000 00310038 00000011  
07-03 17:55:12.251: I/DEBUG(258):     42bf3db0 42b5bb10 42bf14c8 00000010 0000002a  
07-03 17:55:12.251: I/DEBUG(258):     42bf3dc0 41823110 00000000 42bf3de8 0000001f  
07-03 17:55:12.251: I/DEBUG(258): memory near sp:
07-03 17:55:12.251: I/DEBUG(258):     77d44860 61fcd7f8 000155fe 77d448dc 00000000  
07-03 17:55:12.251: I/DEBUG(258):     77d44870 00000000 40118394 00004000 77d448ea  
07-03 17:55:12.251: I/DEBUG(258):     77d44880 00000006 00000016 00007070 00000001  
07-03 17:55:12.251: I/DEBUG(258):     77d44890 00000001 400dd1ad 00000006 00000000  
07-03 17:55:12.251: I/DEBUG(258):     77d448a0 7757bfa8 400dd3c1 77d448b4 400dc0f7  
07-03 17:55:12.251: I/DEBUG(258):     77d448b0 00000000 ffffffdf 401142c4 4011422c  
07-03 17:55:12.251: I/DEBUG(258):     77d448c0 00000000 400decb7 41754db0 41754db0  
07-03 17:55:12.261: I/DEBUG(258):     77d448d0 000000fe 400eba0c 00000000 416d23c3  
07-03 17:55:12.261: I/DEBUG(258):     77d448e0 00000000 6c756e28 0000296c 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d448f0 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44900 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44910 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44920 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44930 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44940 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258):     77d44950 00000000 00000000 00000000 00000000  
07-03 17:55:12.261: I/DEBUG(258): code around pc:
07-03 17:55:12.261: I/DEBUG(258):     400ec134 e8bd00f0 e3700a01 912fff1e e2600000  
07-03 17:55:12.261: I/DEBUG(258):     400ec144 ea006e4f e92d50f0 e3a07f43 ef000000  
07-03 17:55:12.261: I/DEBUG(258):     400ec154 e8bd50f0 e3700a01 912fff1e e2600000  
07-03 17:55:12.261: I/DEBUG(258):     400ec164 ea006e47 e92d50f0 e3a070ee ef000000  
07-03 17:55:12.261: I/DEBUG(258):     400ec174 e8bd50f0 e3700a01 912fff1e e2600000  
07-03 17:55:12.261: I/DEBUG(258):     400ec184 ea006e3f f200429a bf0080b9 f040f891  
07-03 17:55:12.261: I/DEBUG(258):     400ec194 4001e92d f2c02a04 2a1080a5 8093f2c0  
07-03 17:55:12.261: I/DEBUG(258):     400ec1a4 f2c02a20 2a408088 ea4fdb7f f1bc1c92  
07-03 17:55:12.261: I/DEBUG(258):     400ec1b4 dd6c0f0a 0600e92d 0f40f1bc f500dd4a  
07-03 17:55:12.261: I/DEBUG(258):     400ec1c4 f5016e80 ebae7920 ea4f0e09 ea4f5e4e  
07-03 17:55:12.261: I/DEBUG(258):     400ec1d4 f50e5e5e ebbc7e20 dd3b1f9e f04fbfc4  
07-03 17:55:12.261: I/DEBUG(258):     400ec1e4 ebd9090a dd35199e 0a0eeb01 0a3ff02a  
07-03 17:55:12.261: I/DEBUG(258):     400ec1f4 1c9eebac bfd245e1 0c09ebac f04f46e1  
07-03 17:55:12.261: I/DEBUG(258):     400ec204 f8910c00 f891f240 f921f280 f921028d  
07-03 17:55:12.261: I/DEBUG(258):     400ec214 f8da428d f1b93000 f9000901 f900028d  
07-03 17:55:12.261: I/DEBUG(258):     400ec224 f10a428d d1ee0a40 0f00f1bc f5bcd02b  
07-03 17:55:12.261: I/DEBUG(258): code around lr:
07-03 17:55:12.261: I/DEBUG(258):     400dd18c 447b4b13 42b3e010 6a1ed10e 44784811  
07-03 17:55:12.261: I/DEBUG(258):     400dd19c ec84f7fb ea0cf00d 46224631 efcef00e  
07-03 17:55:12.261: I/DEBUG(258):     400dd1ac d00a3001 e00b2400 2b00681b 480ad1eb  
07-03 17:55:12.261: I/DEBUG(258):     400dd1bc 44782403 ec72f7fb f001e002 6804fa23  
07-03 17:55:12.261: I/DEBUG(258):     400dd1cc fa20f001 46206005 bf00bd70 0003b226  
07-03 17:55:12.261: I/DEBUG(258):     400dd1dc 0003b21a 0003b212 0003b1ee bf7ef7ff  
07-03 17:55:12.261: I/DEBUG(258):     400dd1ec 4a3e4b3d e92d447b b08b43f0 4606589c  
07-03 17:55:12.261: I/DEBUG(258):     400dd1fc 6823460d 930946a1 fa04f001 8000f8d0  
07-03 17:55:12.261: I/DEBUG(258):     400dd20c d0482d00 f0104628 280ff889 d8444604  
07-03 17:55:12.261: I/DEBUG(258):     400dd21c ffe4f7ff d1064286 4629200f e8d6f00d  
07-03 17:55:12.261: I/DEBUG(258):     400dd22c d03c2800 482ee02e f7fb4478 482debb6  
07-03 17:55:12.261: I/DEBUG(258):     400dd23c e0154478 d11342b0 482b6a06 f7fb4478  
07-03 17:55:12.261: I/DEBUG(258):     400dd24c 4a2aec2e 46332120 a801447a f92af013  
07-03 17:55:12.261: I/DEBUG(258):     400dd25c a8012101 fc48f01a 46061c42 e011d104  
07-03 17:55:12.261: I/DEBUG(258):     400dd26c 28006800 e02cd1e6 46294630 f00d4622  
07-03 17:55:12.261: I/DEBUG(258):     400dd27c 1c43e912 d11e4607 f9c4f001 29046801  
07-03 17:55:12.421: I/DEBUG(258): !@dumpstate -k -t -z -d -o /data/log/dumpstate_app_native -m 28658
07-03 17:55:12.421: I/BootReceiver(840): Copying /data/tombstones/tombstone_01 to DropBox (SYSTEM_TOMBSTONE)
07-03 17:55:12.431: W/ApplicationPackageManager(840): getCSCPackageItemText()
07-03 17:55:12.441: I/dumpstate(28888): begin
07-03 17:55:12.441: I/dumpstate(28891): begin
07-03 17:55:12.441: I/dumpstate(28891): dumpstate is still running

【问题讨论】:

    标签: android multithreading usb endpoint libusb


    【解决方案1】:

    这是 Android 平台中的 bug,过去 2 周让我很头疼。 最后,我的项目唯一可行的解​​决方案是创建一个补丁。

    首先是问题的根源: 在 UsbRequest.java 类中:http://androidxref.com/4.4.4_r1/xref/frameworks/base/core/java/android/hardware/usb/UsbRequest.java

    在第 136 行,他们正在确定端点的方向:

    boolean out = (mEndpoint.getDirection() == UsbConstants.USB_DIR_OUT);
    

    并且输出布尔值作为参数发送到第 139 行和第 141 行中的本机函数。 如果我们遵循原生对应 UsbRequest.cpp 中的 native_queue_direct 方法: http://androidxref.com/4.4.4_r1/xref/frameworks/base/core/jni/android_hardware_UsbRequest.cpp

    我们可以看到函数接收到的out boolean没有被使用!

    必须使用 out 布尔值,因为只有读取 (IN) 端点(我们将对其执行 requestWait() 的端点)应该分配内存 - request-&gt;client_data = (void *)env-&gt;NewGlobalRef(thiz); - 将由 requestWait() 方法返回。 当我们在 OUT(写入)端点上排队数据时不使用 out 布尔值,它还将分配内存并替换 IN 端点分配的内存。然后,当 requestWait() 返回时,它将尝试返回由 IN 端点分配的内存块,该端点现在不同,并且崩溃:JNI 错误(应用程序错误):访问过时的全局引用 0x7ad003fa(大小为 254 的表中的索引 254) .

    修复:

    android.hardware.usb.UsbDeviceConnection udc = usbManager.openDevice(device);
    com.fixed.usb.UsbDeviceConnection usbDeviceConnection = new com.fixed.usb.UsbDeviceConnection(device, udc.getFileDescriptor());
    

    打开设备后,我们使用返回的 UsbDeviceConnection 来获取设备的文件描述符,然后我们将构造一个新的(固定的)UsbDeviceConnection。然后我们将其用作常规的 UsbDeviceConnection。

    您可以从issue's page下载补丁。

    【讨论】:

    • 我认为删除 #include 是安全的
    • DEBUG 只是一个常量,LOGE 只是一个日志功能。提供您自己的或删除它。
    • 警告/错误可以修复。不应该是表演的终结者。是否要使用它取决于您。如果你做或不做,我没有任何收获。我将该代码提供给社区以进行回馈。它可以解决您的问题。但不要指望将所有东西都放在银盘上并且免费。祝你好运。
    • Google 应该已经在 Android 5 中修复了它,但您知道在 android 世界中是怎样的:如果您的手机制造商有自己的该类实现,那么他们没有 google 在 AOSP 中进行的修复.
    【解决方案2】:

    当您尝试再次打开设备和连接时可能会发生此问题(所有操作都已完成)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多