diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index 5f7bfe265c71b..9e575bfa5204a 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -48,6 +48,7 @@ int CameraHalManager::init()
 {
 	cameraManager_ = std::make_unique<CameraManager>();
 
+#ifdef HAVE_LIBYAML
 	/*
 	 * If the configuration file is not available the HAL only supports
 	 * external cameras. If it exists but it's not valid then error out.
@@ -56,6 +57,7 @@ int CameraHalManager::init()
 		LOG(HAL, Error) << "HAL configuration file is not valid";
 		return -EINVAL;
 	}
+#endif
 
 	/* Support camera hotplug. */
 	cameraManager_->cameraAdded.connect(this, &CameraHalManager::cameraAdded);
@@ -133,6 +135,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
 		}
 	}
 
+#ifdef HAVE_LIBYAML
 	/*
 	 * The configuration file must be valid, and contain a corresponding
 	 * entry for internal cameras. External cameras can be initialized
@@ -145,6 +148,16 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
 	}
 
 	const CameraConfigData *cameraConfigData = halConfig_.cameraConfigData(cam->id());
+#else
+	/*
+	 * Assume that cameras without properties::Location specified are external.
+	 */
+	const CameraConfigData *cameraConfigData = nullptr;
+	if (!isCameraExternal && cameraLocation(cam.get()) < 0) {
+		isCameraExternal = true;
+		id = nextExternalCameraId_;
+	}
+#endif
 
 	/*
 	 * Some cameras whose location is reported by libcamera as external may
diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h
index a5f8b933a7902..056abbb0d4e54 100644
--- a/src/android/camera_hal_manager.h
+++ b/src/android/camera_hal_manager.h
@@ -56,7 +56,9 @@ private:
 	CameraDevice *cameraDeviceFromHalId(unsigned int id) LIBCAMERA_TSA_REQUIRES(mutex_);
 
 	std::unique_ptr<libcamera::CameraManager> cameraManager_;
+#ifdef HAVE_LIBYAML
 	CameraHalConfig halConfig_;
+#endif
 
 	const camera_module_callbacks_t *callbacks_;
 	std::vector<std::unique_ptr<CameraDevice>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
diff --git a/src/android/meson.build b/src/android/meson.build
index 75b4bf2070851..1e471c291a1e4 100644
--- a/src/android/meson.build
+++ b/src/android/meson.build
@@ -3,7 +3,6 @@
 android_deps = [
     dependency('libexif', required : get_option('android')),
     dependency('libjpeg', required : get_option('android')),
-    dependency('yaml-0.1', required : get_option('android')),
     libcamera_private,
 ]
 
@@ -41,7 +40,6 @@ android_hal_sources = files([
     'camera3_hal.cpp',
     'camera_capabilities.cpp',
     'camera_device.cpp',
-    'camera_hal_config.cpp',
     'camera_hal_manager.cpp',
     'camera_metadata.cpp',
     'camera_ops.cpp',
@@ -56,6 +54,14 @@ android_hal_sources = files([
 
 android_cpp_args = []
 
+libyaml_dep = dependency('yaml-0.1', required : false)
+if libyaml_dep.found()
+    config_h.set('HAVE_LIBYAML', 1)
+    android_hal_sources += files([
+        'camera_hal_config.cpp',
+    ])
+endif
+
 subdir('cros')
 subdir('mm')
 
