测试项: 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);
}