3568 Android 相机应用崩溃 —— 扫码相机作者吴思含Witheart更新时间20260408问题描述客诉USB相机接入3568后打开系统下相机应用应用闪退崩溃。原因分析通过日志可以看到D CAM_Camera2OneCamMgr: Getting First BACK Camera W CAM_Camera2OneCamMgr: No back-facing camera found. D CAM_Camera2OneCamMgr: Getting First FRONT Camera D CAM_Camera2OneCamMgr: Getting First FRONT Camera W CAM_Camera2OneCamMgr: No front-facing camera found,try to find external facing camera. W CAM_Camera2OneCamMgr: No external camera found. 04-08 17:00:59.934 4539 4539 D AndroidRuntime: Shutting down VM 04-08 17:00:59.935 4539 4539 E AndroidRuntime: FATAL EXCEPTION: main 04-08 17:00:59.935 4539 4539 E AndroidRuntime: Process: com.android.camera2, PID: 4539 04-08 17:00:59.935 4539 4539 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.camera2/com.android.camera.CameraActivity}: java.lang.ArrayIndexOutOfBoundsException: length0; index0 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3431) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3595) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.os.Looper.loop(Looper.java:223) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7664) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: Caused by: java.lang.ArrayIndexOutOfBoundsException: length0; index0 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.camera.CaptureModule.getFacingFromCameraId(CaptureModule.java:1678) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.camera.CaptureModule.init(CaptureModule.java:430) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.camera.CameraActivity.onCreateTasks(CameraActivity.java:1808) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at com.android.camera.util.QuickActivity.onCreate(QuickActivity.java:114) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8013) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:7997) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3404) 04-08 17:00:59.935 4539 4539 E AndroidRuntime: ... 11 more 04-08 17:00:59.938 429 4577 I DropBoxManagerService: add tagsystem_app_crash isTagEnabledtrue flags0x2 04-08 17:00:59.939 429 554 W ActivityTaskManager: Force finishing activity com.android.camera2/com.android.camera.CameraLauncher从日志可以推断相机应用启动后由于在设备上没有找到任何可用的摄像头包括前置、后置和外接导致用于管理摄像头信息的内部数组为空。当代码试图访问这个空数组的第一个元素index0以获取摄像头方向等信息时触发了 ArrayIndexOutOfBoundsException最终导致应用崩溃。通过捕捉插入USB摄像头的日志可以看到该USB摄像头被识别成一个HID设备而不是UVC设备04-08 17:01:59.242 0 0 I usb 5-1 : new full-speed USB device number 2 using xhci-hcd 04-08 17:01:59.384 0 0 I usb 5-1 : New USB device found, idVendor26f1, idProduct8801, bcdDevice 1.00 04-08 17:01:59.384 0 0 I usb 5-1 : New USB device strings: Mfr1, Product2, SerialNumber3 04-08 17:01:59.384 0 0 I usb 5-1 : Product: HIDKeyBoard 04-08 17:01:59.384 0 0 I usb 5-1 : Manufacturer: TMC 04-08 17:01:59.384 0 0 I usb 5-1 : SerialNumber: 1234567890abcd 04-08 17:01:59.404 0 0 I input : TMC HIDKeyBoard as /devices/platform/usbhost/fd000000.dwc3/xhci-hcd.1.auto/usb5/5-1/5-1:1.0/0003:26F1:8801.0002/input/input5 04-08 17:01:59.460 429 429 D RockchipProcessCompactor: StartJob: RockchipProcessCompactor, id: 814 04-08 17:01:59.462 429 4644 I RockchipProcessCompactor: Do native process reclaim...check logcat TAG: RockchipReclaimD 04-08 17:01:59.467 0 0 I hid-generic 0003: 26F1:8801.0002: input,hidraw1: USB HID v1.10 Keyboard [TMC HIDKeyBoard] on usb-xhci-hcd.1.auto-1/input0 04-08 17:01:59.472 0 0 I init : starting service rockchip.reclaimd... 04-08 17:01:59.474 429 503 D EventHub: No input device configuration file found for device TMC HIDKeyBoard. 04-08 17:01:59.476 0 0 I init : Control message: Processed ctl.start for rockchip.reclaimd from pid: 429 (system_server) 04-08 17:01:59.478 429 503 I EventHub: usingClockIoctltrue 04-08 17:01:59.478 429 503 I EventHub: New device: id4, fd259, path/dev/input/event3, nameTMC HIDKeyBoard, classes0x83, configuration, keyLayout/system/usr/keylayout/Generic.kl, keyCharacterMap/system/usr/keychars/Generic.kcm, builtinKeyboardfalse, 04-08 17:01:59.478 429 503 I InputReader: Device added: id5, eventHubId4, nameTMC HIDKeyBoard, descriptord5a9a941570ea7fabc7992ad900011239457b6da,sources0x80000101相机只能打开UVC设备HID设备应该按照HID的方式去开发故系统本身是没有问题的。