diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c
index f87fe9cbf298b75287a1487d96c2eee9c618ca53..d2aada062284a2770f45661a84ef66c23e476ee9 100644
--- a/coreapi/linphonecore.c
+++ b/coreapi/linphonecore.c
@@ -2235,8 +2235,7 @@ static void linphone_core_init(LinphoneCore * lc, LinphoneCoreCbs *cbs, LpConfig
 	// We need the Sal on the Android platform helper init
 	msplugins_dir = linphone_factory_get_msplugins_dir(lfactory);
 	image_resources_dir = linphone_factory_get_image_resources_dir(lfactory);
-	lc->factory = ms_factory_new_with_voip_and_directories(msplugins_dir, image_resources_dir);
-	lc->sal=new Sal(lc->factory);
+	lc->sal=new Sal(NULL);
 	lc->sal->set_http_proxy_host(linphone_core_get_http_proxy_host(lc));
 	lc->sal->set_http_proxy_port(linphone_core_get_http_proxy_port(lc));
 
@@ -2250,6 +2249,10 @@ static void linphone_core_init(LinphoneCore * lc, LinphoneCoreCbs *cbs, LpConfig
 	if (lc->platform_helper == NULL)
 		lc->platform_helper = new LinphonePrivate::StubbedPlatformHelpers(lc);
 
+	// MS Factory MUST be created after Android has been set, otherwise no camera will be detected !
+	lc->factory = ms_factory_new_with_voip_and_directories(msplugins_dir, image_resources_dir);
+	lc->sal->set_factory(lc->factory);
+
 	belr::GrammarLoader::get().addPath(getPlatformHelpers(lc)->getDataPath());
 
 	linphone_task_list_init(&lc->hooks);
diff --git a/src/sal/sal.h b/src/sal/sal.h
index 9d41b04b7e61ee5a3d852c158dea5a0085a0e081..bf9322d4842235f335ba56a405af286cfed2e2e9 100644
--- a/src/sal/sal.h
+++ b/src/sal/sal.h
@@ -114,6 +114,10 @@ public:
 	Sal(MSFactory *factory);
 	~Sal();
 
+	void set_factory(MSFactory *factory) {
+		this->factory = factory;
+	}
+
 	void set_user_pointer(void *user_data) {this->up=user_data;}
 	void *get_user_pointer() const {return this->up;}