测试项: run cts -m CtsCameraTestCases -t android.hardware.cts.CameraTest#testMultipleCameras

报错log: junit.framework.AssertionFailedError: getCameraInfo should not accept bad cameraId (2)

报错原因: 此测试项是 测试 camera_id_list之外的 camera id能不能被 get_cam_info 和 open, 因为之前这个项目是双摄的, 对 cts 包名没有暴露 辅摄, 但是此项测试时 能够被 get_caminfo 和 open, 所以测试fail

fix 方法: 修改 framework/base/core/java/android/hardware/Camera.java , 当cts 包名对 camera id list 之外的camera id进行 get_caminfo 或者 open 操作时, 强制把camera id改为 -1, 这样就会get_caminfo 和open 报错。

代码修改:
//begin added 注释包围部分为新增代码
1.

public static void getCameraInfo(int cameraId, CameraInfo cameraInfo) {
    //begin added on 20190902, fixed cts#testMultipleCameras.
    boolean exposeAuxCamera = false;
    String packageName = ActivityThread.currentOpPackageName();
    /* Force to expose only two cameras
     * if the package name does not falls in this bucket
     */
    String packageList = SystemProperties.get("vendor.camera.aux.packagelist");
    if (packageList.length() > 0) {
        TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter(',');
        splitter.setString(packageList);
        for (String str : splitter) {
            if (packageName.equals(str)) {
                exposeAuxCamera = true;
                break;
            }
        }
    }
    if (exposeAuxCamera == false && (cameraId > 1)) {
        cameraId = -1;
    }
    //end added on 20190902, fixed cts#testMultipleCameras.
    _getCameraInfo(cameraId, cameraInfo);
    IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
    IAudioService audioService = IAudioService.Stub.asInterface(b);
    try {
        if (audioService.isCameraSoundForced()) {
            // Only set this when sound is forced; otherwise let native code
            // decide.
            cameraInfo.canDisableShutterSound = false;
        }
    } catch (RemoteException e) {
        Log.e(TAG, "Audio service is unavailable for queries");
    }
}
public static Camera open(int cameraId) {

    //begin added on 20190902, fixed cts#testMultipleCameras.
    boolean exposeAuxCamera = false;
    String packageName = ActivityThread.currentOpPackageName();
    /* Force to expose only two cameras
     * if the package name does not falls in this bucket
     */
    String packageList = SystemProperties.get("vendor.camera.aux.packagelist");
    if (packageList.length() > 0) {
        TextUtils.StringSplitter splitter = new TextUtils.SimpleStringSplitter(',');
        splitter.setString(packageList);
        for (String str : splitter) {
            if (packageName.equals(str)) {
                exposeAuxCamera = true;
                break;
            }
        }
    }

    if (exposeAuxCamera == false && (cameraId > 1)) {
        cameraId = -1;
    }
    //end added on 20190902, fixed cts#testMultipleCameras.

    return new Camera(cameraId);
}
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐