From 43e15bb9f01476114cf85be8a47922df2fd7dcf5 Mon Sep 17 00:00:00 2001 From: magjed Date: Wed, 27 Jul 2016 08:25:08 -0700 Subject: [PATCH] Android Camera2Enumerator: Remove CameraAccessException to avoid VerifyError Apparently, a class will fail with VerifyError if it contains catch statements with an Exception from a newer API, even if the code is never executed. This happens only on Android versions before 4.4.2 and is a bug. See https://code.google.com/p/android/issues/detail?id=209129 for more info. BUG=b/30376736 Review-Url: https://codereview.webrtc.org/2185833003 Cr-Commit-Position: refs/heads/master@{#13542} --- .../java/src/org/webrtc/Camera2Enumerator.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java b/webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java index 4c5de159cd..1491a8dd33 100644 --- a/webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java +++ b/webrtc/api/android/java/src/org/webrtc/Camera2Enumerator.java @@ -16,13 +16,13 @@ import android.annotation.TargetApi; import android.content.Context; import android.graphics.Rect; import android.graphics.SurfaceTexture; -import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CameraMetadata; import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Build; import android.os.SystemClock; +import android.util.AndroidException; import android.util.Range; import java.util.ArrayList; @@ -52,7 +52,10 @@ public class Camera2Enumerator implements CameraEnumerator { public String[] getDeviceNames() { try { return cameraManager.getCameraIdList(); - } catch (CameraAccessException e) { + // On Android OS pre 4.4.2, a class will not load because of VerifyError if it contains a + // catch statement with an Exception from a newer API, even if the code is never executed. + // https://code.google.com/p/android/issues/detail?id=209129 + } catch (/* CameraAccessException */ AndroidException e) { Logging.e(TAG, "Camera access exception: " + e); return new String[] {}; } @@ -87,7 +90,10 @@ public class Camera2Enumerator implements CameraEnumerator { private CameraCharacteristics getCameraCharacteristics(String deviceName) { try { return cameraManager.getCameraCharacteristics(deviceName); - } catch (CameraAccessException e) { + // On Android OS pre 4.4.2, a class will not load because of VerifyError if it contains a + // catch statement with an Exception from a newer API, even if the code is never executed. + // https://code.google.com/p/android/issues/detail?id=209129 + } catch (/* CameraAccessException */ AndroidException e) { Logging.e(TAG, "Camera access exception: " + e); return null; }