Only use 'recursiveFetchArrayMap' in Android.

Although available both in Android and JVM Desktop, using ArrayMap only
makes sense for Android as it was designed with Android's memory usage
constraints in mind. Therefore using it for JVM Desktop does not make
sense in terms of improving efficiency.

Bug: 352482325
Test: Reproduced issue by adding the KMP `androidx.collection` dependency to the KMP testapp.
Change-Id: Ia2c6fc6555058a51cc5815d28c873e8e61740d2d
diff --git a/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/BaseQueryTest.kt b/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/BaseQueryTest.kt
index 8aca8a4..fd70fe2 100644
--- a/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/BaseQueryTest.kt
+++ b/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/BaseQueryTest.kt
@@ -466,14 +466,14 @@
 
     @Test
     fun relationManytoMany() = runTest {
-        val sampleEntity1 = SampleEntity(1, 1)
-        val sampleEntity1s = listOf(sampleEntity1, SampleEntity(2, 2))
+        val sampleEntity1 = StringSampleEntity1("1", "1")
+        val sampleEntity1s = listOf(sampleEntity1, StringSampleEntity1("2", "2"))
 
-        val sampleEntity2 = SampleEntity2(1, 1)
-        val sampleEntity2s = listOf(sampleEntity2, SampleEntity2(2, 2))
+        val sampleEntity2 = StringSampleEntity2("1", "1")
+        val sampleEntity2s = listOf(sampleEntity2, StringSampleEntity2("2", "2"))
 
-        db.dao().insertSampleEntityList(sampleEntity1s)
-        db.dao().insertSampleEntity2List(sampleEntity2s)
+        db.dao().insertSampleEntity1WithString(sampleEntity1s)
+        db.dao().insertSampleEntity2WithString(sampleEntity2s)
 
         assertThat(db.dao().getSampleManyToMany())
             .isEqualTo(SampleDao.SampleManyAndMany(sample1 = sampleEntity1, sample2s = listOf()))
diff --git a/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/SampleDatabase.kt b/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/SampleDatabase.kt
index 0583cab..f8dd1b2 100644
--- a/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/SampleDatabase.kt
+++ b/room/integration-tests/multiplatformtestapp/src/commonTest/kotlin/androidx/room/integration/multiplatformtestapp/test/SampleDatabase.kt
@@ -64,13 +64,25 @@
     @ColumnInfo(defaultValue = "0") val dataCopy: Long
 )
 
+@Entity
+data class StringSampleEntity1(
+    @PrimaryKey val stringPk1: String,
+    @ColumnInfo(defaultValue = "0") val data1: String
+)
+
+@Entity
+data class StringSampleEntity2(
+    @PrimaryKey val stringPk2: String,
+    @ColumnInfo(defaultValue = "0") val data2: String
+)
+
 @Entity(
     primaryKeys = ["sample1Key", "sample2Key"],
     indices = [Index("sample1Key"), Index("sample2Key")]
 )
 data class Sample1Sample2XRef(
-    val sample1Key: Long,
-    val sample2Key: Long,
+    val sample1Key: String,
+    val sample2Key: String,
 )
 
 @Dao
@@ -142,6 +154,10 @@
 
     @Insert suspend fun insertSampleEntityList(entities: List<SampleEntity>)
 
+    @Insert suspend fun insertSampleEntity1WithString(entities: List<StringSampleEntity1>)
+
+    @Insert suspend fun insertSampleEntity2WithString(entities: List<StringSampleEntity2>)
+
     @Insert suspend fun insertSampleEntity2List(entities: List<SampleEntity2>)
 
     @Insert suspend fun insert(entity: SampleEntity2)
@@ -167,7 +183,7 @@
     @Transaction @Query("SELECT * FROM SampleEntity") suspend fun getSample1ToMany(): Sample1AndMany
 
     @Transaction
-    @Query("SELECT * FROM SampleEntity")
+    @Query("SELECT * FROM StringSampleEntity1")
     suspend fun getSampleManyToMany(): SampleManyAndMany
 
     data class Sample1And2(
@@ -181,10 +197,10 @@
     )
 
     data class SampleManyAndMany(
-        @Embedded val sample1: SampleEntity,
+        @Embedded val sample1: StringSampleEntity1,
         @Relation(
-            parentColumn = "pk",
-            entityColumn = "pk2",
+            parentColumn = "stringPk1",
+            entityColumn = "stringPk2",
             associateBy =
                 Junction(
                     value = Sample1Sample2XRef::class,
@@ -192,7 +208,7 @@
                     entityColumn = "sample2Key"
                 )
         )
-        val sample2s: List<SampleEntity2>
+        val sample2s: List<StringSampleEntity2>
     )
 }
 
@@ -203,6 +219,8 @@
             SampleEntity2::class,
             SampleEntity3::class,
             SampleEntityCopy::class,
+            StringSampleEntity1::class,
+            StringSampleEntity2::class,
             Sample1Sample2XRef::class
         ],
     version = 1,
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt
index 86ff171..295e26f 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/RelationCollector.kt
@@ -610,7 +610,8 @@
             val canUseLongSparseArray =
                 context.processingEnv.findTypeElement(LONG_SPARSE_ARRAY.canonicalName) != null
             val canUseArrayMap =
-                context.processingEnv.findTypeElement(ARRAY_MAP.canonicalName) != null
+                context.processingEnv.findTypeElement(ARRAY_MAP.canonicalName) != null &&
+                    context.isAndroidOnlyTarget()
             return when {
                 canUseLongSparseArray && affinity == SQLTypeAffinity.INTEGER ->
                     LONG_SPARSE_ARRAY.parametrizedBy(valueTypeName)