Skip to content

Camera broken by the latest Android 16 update #6523

Closed

Description

@rom1v

Camera access is broken since the latest Pixel update:

$ scrcpy --list-cameras
scrcpy 3.3.3 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  xxxxxxxx                  device  Pixel_8
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 112.1 MB/s (90960 bytes in 0.001s)
[server] INFO: Device: [Google] google Pixel 8 (Android 16)
[server] ERROR: Permission Denial: package=android does not belong to uid=2000
java.lang.SecurityException: Permission Denial: package=android does not belong to uid=2000
	at android.os.Parcel.createExceptionOrNull(Parcel.java:3373)
	at android.os.Parcel.createException(Parcel.java:3357)
	at android.os.Parcel.readException(Parcel.java:3340)
	at android.os.Parcel.readException(Parcel.java:3282)
	at android.app.IActivityTaskManager$Stub$Proxy.getAppTasks(IActivityTaskManager.java:3023)
	at android.app.ActivityManager.getAppTasks(ActivityManager.java:3011)
	at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1673)
	at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1653)
	at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:714)
	at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:147)
	at com.genymobile.scrcpy.Server.internalMain(Server.java:259)
	at com.genymobile.scrcpy.Server.main(Server.java:215)
	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:366)
Caused by: android.os.RemoteException: Remote stack trace:
	at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2422)
	at com.android.server.wm.ActivityTaskManagerService.getAppTasks(ActivityTaskManagerService.java:2843)
	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1586)
	at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6233)
	at android.os.Binder.execTransactInternal(Binder.java:1473)
$ scrcpy --video-source=camera
scrcpy 3.3.3 <https://github.com/Genymobile/scrcpy>
INFO: Camera video source: control disabled
INFO: Camera video source: microphone audio source selected
INFO: ADB device found:
INFO:     -->   (usb)  38151FDJH00CP4                  device  Pixel_8
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 28.5 MB/s (90960 bytes in 0.003s)
[server] INFO: Device: [Google] google Pixel 8 (Android 16)
[server] INFO: Using camera '0'
[server] ERROR: Exception on thread Thread[video,5,main]
java.lang.SecurityException: Permission Denial: package=android does not belong to uid=2000
	at android.os.Parcel.createExceptionOrNull(Parcel.java:3373)
	at android.os.Parcel.createException(Parcel.java:3357)
	at android.os.Parcel.readException(Parcel.java:3340)
	at android.os.Parcel.readException(Parcel.java:3282)
	at android.app.IActivityTaskManager$Stub$Proxy.getAppTasks(IActivityTaskManager.java:3023)
	at android.app.ActivityManager.getAppTasks(ActivityManager.java:3011)
	at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1673)
	at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1653)
	at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:1240)
	at com.genymobile.scrcpy.video.CameraCapture.openCamera(CameraCapture.java:311)
	at com.genymobile.scrcpy.video.CameraCapture.init(CameraCapture.java:109)
	at com.genymobile.scrcpy.video.SurfaceCapture.init(SurfaceCapture.java:33)
	at com.genymobile.scrcpy.video.SurfaceEncoder.streamCapture(SurfaceEncoder.java:70)
	at com.genymobile.scrcpy.video.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-video-SurfaceEncoder(SurfaceEncoder.java:296)
	at com.genymobile.scrcpy.video.SurfaceEncoder$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
	at java.lang.Thread.run(Thread.java:1563)
Caused by: android.os.RemoteException: Remote stack trace:
	at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2422)
	at com.android.server.wm.ActivityTaskManagerService.getAppTasks(ActivityTaskManagerService.java:2843)
	at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1586)
	at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6233)
	at android.os.Binder.execTransactInternal(Binder.java:1473)

Activity

  1. rom1v commented on Dec 9, 2025

    @rom1v
    CollaboratorAuthor

    This is sufficient to workaround the issue:

    diff --git server/src/main/java/com/genymobile/scrcpy/FakeContext.java server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    index 7c0f36455..07340391f 100644
    --- server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    +++ server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    @@ -110,7 +110,7 @@ public final class FakeContext extends ContextWrapper {
     
             // "semclipboard" is a Samsung-internal service
             // See <https://github.com/Genymobile/scrcpy/issues/6224>
    -        if (Context.CLIPBOARD_SERVICE.equals(name) || "semclipboard".equals(name)) {
    +        if (Context.CLIPBOARD_SERVICE.equals(name) || "semclipboard".equals(name) || Context.ACTIVITY_SERVICE.equals(name)) {
                 try {
                     Field field = service.getClass().getDeclaredField("mContext");
                     field.setAccessible(true);
  2. added a commit that references this issue on Dec 9, 2025
    5b51396
  3. rom1v commented on Dec 9, 2025

    @rom1v
    CollaboratorAuthor

    Fixed by 5b51396.

  4. rom1v commented on Dec 15, 2025

    @rom1v
    CollaboratorAuthor

    Here is a binary with the fix to replace in scrcpy 3.3.3:

    • scrcpy-server SHA-256: f4387c2eccebf17dc8e40bf9e6ec61705dfce5356a32f93d8568d1a97599d11
  5. JustCauseWhyNot commented on Dec 17, 2025

    @JustCauseWhyNot

    I tried patching build 3.3.3, but it didn't fix the error. Not sure if I did something wrong, or if I need to build from the latest commit. But it was easiest for me to patch, and build from 3.3.3. It also seems like a small change that should fix it.

    personal patch
    From df72ea8ef0441ecc6496269720f90a1e7cadf940 Mon Sep 17 00:00:00 2001
    From: JustCauseWhyNot <JustCauseWhyNot@tuta.io>
    Date: Wed, 17 Dec 2025 09:20:58 -0700
    Subject: [PATCH] fix: make webcam work again
    
    ---
     server/src/main/java/com/genymobile/scrcpy/FakeContext.java | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/server/src/main/java/com/genymobile/scrcpy/FakeContext.java b/server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    index 7c0f3645..07340391 100644
    --- a/server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    +++ b/server/src/main/java/com/genymobile/scrcpy/FakeContext.java
    @@ -110,7 +110,7 @@ public final class FakeContext extends ContextWrapper {
     
             // "semclipboard" is a Samsung-internal service
             // See <https://github.com/Genymobile/scrcpy/issues/6224>
    -        if (Context.CLIPBOARD_SERVICE.equals(name) || "semclipboard".equals(name)) {
    +        if (Context.CLIPBOARD_SERVICE.equals(name) || "semclipboard".equals(name) || Context.ACTIVITY_SERVICE.equals(name)) {
                 try {
                     Field field = service.getClass().getDeclaredField("mContext");
                     field.setAccessible(true);
    -- 
    2.52.0
    
    error output
    ❯ scrcpy --video-source=camera --camera-{id=0,size=3840x2160,fps=60} --no-audio --v4l2-sink=/dev/video0 --no-playback
    scrcpy 3.3.3 <https://github.com/Genymobile/scrcpy>
    INFO: No video mirroring, SDK mouse disabled
    INFO: Camera video source: control disabled
    INFO: ADB device found:
    INFO:     -->   (usb)  26061JEGR07424                  device  Pixel_6a
    /usr/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 376.2 MB/s (90164 bytes in 0.000s)
    [server] INFO: Device: [Google] google Pixel 6a (Android 16)
    [server] INFO: Using camera '0'
    [server] ERROR: Exception on thread Thread[video,5,main]
    java.lang.SecurityException: Permission Denial: package=android does not belong to uid=2000
            at android.os.Parcel.createExceptionOrNull(Parcel.java:3382)
            at android.os.Parcel.createException(Parcel.java:3366)
            at android.os.Parcel.readException(Parcel.java:3342)
            at android.os.Parcel.readException(Parcel.java:3284)
            at android.app.IActivityTaskManager$Stub$Proxy.getAppTasks(IActivityTaskManager.java:3024)
            at android.app.ActivityManager.getAppTasks(ActivityManager.java:3014)
            at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1673)
            at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1653)
            at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:1240)
            at com.genymobile.scrcpy.video.CameraCapture.openCamera(CameraCapture.java:311)
            at com.genymobile.scrcpy.video.CameraCapture.init(CameraCapture.java:109)
            at com.genymobile.scrcpy.video.SurfaceCapture.init(SurfaceCapture.java:33)
            at com.genymobile.scrcpy.video.SurfaceEncoder.streamCapture(SurfaceEncoder.java:70)
            at com.genymobile.scrcpy.video.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-video-SurfaceEncoder(SurfaceEncoder.java:296)
            at com.genymobile.scrcpy.video.SurfaceEncoder$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
            at java.lang.Thread.run(Thread.java:1563)
    Caused by: android.os.RemoteException: Remote stack trace:
            at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2421)
            at com.android.server.wm.ActivityTaskManagerService.getAppTasks(ActivityTaskManagerService.java:2842)
            at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1586)
            at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6232)
            at android.os.Binder.execTransactInternal(Binder.java:1517)
    
    INFO: Renderer: opengl
    INFO: OpenGL version: 4.6.0 NVIDIA 580.119.02
    INFO: Trilinear filtering disabled
    ERROR: Demuxer 'video': stream disabled due to connection error
    ERROR: Demuxer error
    

    build.log

  6. rom1v commented on Dec 17, 2025

    @rom1v
    CollaboratorAuthor

    @JustCauseWhyNot

    prebuilt_server : /var/tmp/portage/app-mobilephone/scrcpy-3.3.3/distdir/scrcpy-server-v3.3.3

    You're only rebuilding the client, where as the change is in the server.

  7. JustCauseWhyNot commented on Dec 17, 2025

    @JustCauseWhyNot

    I'm sorry, but I don't understand what I'm failing to do. I get there's client, and server. I see there two separate binaries. But when I build scrcpy through portage, or the install_release.sh a scrcpy-server bin doesn't get built. I tried manually putting the scrcpy-server into /usr/bin also, but it didn't change anything. I apologize for my lack of understanding.

  8. JustCauseWhyNot commented on Dec 17, 2025

    @JustCauseWhyNot

    I figured it out. Sorry for the waste of time. I didn't realize I needed to replace the scrcpy-server apk that's installed at /usr/share/scrcpy. Thank you for your help.

  9. rom1v commented on Dec 17, 2025

    @rom1v
    CollaboratorAuthor

    Fixed in scrcpy 3.3.4.

  10. federicososa438-a11y commented on Feb 20, 2026

    @federicososa438-a11y

    Camera access is broken since the latest Pixel update:

    $ scrcpy --list-cameras
    scrcpy 3.3.3 https://github.com/Genymobile/scrcpy
    INFO: ADB device found:
    INFO: --> (usb) xxxxxxxx device Pixel_8
    /usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 112.1 MB/s (90960 bytes in 0.001s)
    [server] INFO: Device: [Google] google Pixel 8 (Android 16)
    [server] ERROR: Permission Denial: package=android does not belong to uid=2000
    java.lang.SecurityException: Permission Denial: package=android does not belong to uid=2000
    at android.os.Parcel.createExceptionOrNull(Parcel.java:3373)
    at android.os.Parcel.createException(Parcel.java:3357)
    at android.os.Parcel.readException(Parcel.java:3340)
    at android.os.Parcel.readException(Parcel.java:3282)
    at android.app.IActivityTaskManager$Stub$Proxy.getAppTasks(IActivityTaskManager.java:3023)
    at android.app.ActivityManager.getAppTasks(ActivityManager.java:3011)
    at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1673)
    at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1653)
    at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:714)
    at com.genymobile.scrcpy.util.LogUtils.buildCameraListMessage(LogUtils.java:147)
    at com.genymobile.scrcpy.Server.internalMain(Server.java:259)
    at com.genymobile.scrcpy.Server.main(Server.java:215)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:366)
    Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2422)
    at com.android.server.wm.ActivityTaskManagerService.getAppTasks(ActivityTaskManagerService.java:2843)
    at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1586)
    at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6233)
    at android.os.Binder.execTransactInternal(Binder.java:1473)
    $ scrcpy --video-source=camera
    scrcpy 3.3.3 https://github.com/Genymobile/scrcpy
    INFO: Camera video source: control disabled
    INFO: Camera video source: microphone audio source selected
    INFO: ADB device found:
    INFO: --> (usb) 38151FDJH00CP4 device Pixel_8
    /usr/local/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 28.5 MB/s (90960 bytes in 0.003s)
    [server] INFO: Device: [Google] google Pixel 8 (Android 16)
    [server] INFO: Using camera '0'
    [server] ERROR: Exception on thread Thread[video,5,main]
    java.lang.SecurityException: Permission Denial: package=android does not belong to uid=2000
    at android.os.Parcel.createExceptionOrNull(Parcel.java:3373)
    at android.os.Parcel.createException(Parcel.java:3357)
    at android.os.Parcel.readException(Parcel.java:3340)
    at android.os.Parcel.readException(Parcel.java:3282)
    at android.app.IActivityTaskManager$Stub$Proxy.getAppTasks(IActivityTaskManager.java:3023)
    at android.app.ActivityManager.getAppTasks(ActivityManager.java:3011)
    at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1673)
    at android.hardware.camera2.CameraManager.getRotationOverride(CameraManager.java:1653)
    at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:1240)
    at com.genymobile.scrcpy.video.CameraCapture.openCamera(CameraCapture.java:311)
    at com.genymobile.scrcpy.video.CameraCapture.init(CameraCapture.java:109)
    at com.genymobile.scrcpy.video.SurfaceCapture.init(SurfaceCapture.java:33)
    at com.genymobile.scrcpy.video.SurfaceEncoder.streamCapture(SurfaceEncoder.java:70)
    at com.genymobile.scrcpy.video.SurfaceEncoder.lambda$start$0$com-genymobile-scrcpy-video-SurfaceEncoder(SurfaceEncoder.java:296)
    at com.genymobile.scrcpy.video.SurfaceEncoder$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
    at java.lang.Thread.run(Thread.java:1563)
    Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.wm.ActivityTaskManagerService.assertPackageMatchesCallingUid(ActivityTaskManagerService.java:2422)
    at com.android.server.wm.ActivityTaskManagerService.getAppTasks(ActivityTaskManagerService.java:2843)
    at android.app.IActivityTaskManager$Stub.onTransact(IActivityTaskManager.java:1586)
    at com.android.server.wm.ActivityTaskManagerService.onTransact(ActivityTaskManagerService.java:6233)
    at android.os.Binder.execTransactInternal(Binder.java:1473)

  11. rom1v commented on Feb 20, 2026

    @rom1v
    CollaboratorAuthor

    @federicososa438-a11y It is fixed in 3.3.4. Upgrade to the latest version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions