An Azure communication platform for deploying applications across devices and platforms.
Azure Communication Services: Does the ACS UI Library for Android support Android Automotive OS also?
We are building a Microsoft Teams like app for the Android Automotive OS (AAOS) environment. This app would provide its users with a similar calling/meeting experience as the MS Teams client app for Mobile and Desktop.
For this purpose, we tried making use of the Azure Communication Services SDKs for Android environment. Specifically, we tested the ACS Calling SDK and ACS UI Library for Android.
We tried creating a small sample app for launching the UI CallComposite available in ACS UI library that allows us to launch an end-to-end calling experience from our Android app, after a bit of configuration.
However, upon building and running the app on an Android emulator, we find that the app crashes upon launching when run on an Automotive emulator that runs AAOS. The same app builds and runs successfully for a Pixel Tablet emulator running Android OS API 33. So our question is, does the ACS UI library for Android support Android Automotive environments or is it primarily built to work with Android OS specific devices like Mobile/Tablet.
Here is the exact crash logs we get in an Android automotive emulator:
---------------------------- PROCESS STARTED (4131) for package com.mohit.acsuilibraryapp ----------------------------
2026-08-24 22:57:59.926 4131-4131 GraphicsEnvironment com.mohit.acsuilibraryapp V ANGLE Developer option for 'com.mohit.acsuilibraryapp' set to: 'default'
2026-08-24 22:57:59.955 4131-4131 GraphicsEnvironment com.mohit.acsuilibraryapp V ANGLE GameManagerService for com.mohit.acsuilibraryapp: false
2026-08-24 22:57:59.955 4131-4131 GraphicsEnvironment com.mohit.acsuilibraryapp V Neither updatable production driver nor prerelease driver is supported.
2026-08-24 22:58:00.008 4131-4131 NetworkSecurityConfig com.mohit.acsuilibraryapp D No Network Security Config specified, using platform default
2026-08-24 22:58:00.012 4131-4131 NetworkSecurityConfig com.mohit.acsuilibraryapp D No Network Security Config specified, using platform default
2026-08-24 22:58:00.318 4131-4179 libEGL com.mohit.acsuilibraryapp D loaded /vendor/lib64/egl/libEGL_emulation.so
2026-08-24 22:58:00.331 4131-4179 libEGL com.mohit.acsuilibraryapp D loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
2026-08-24 22:58:00.399 4131-4179 libEGL com.mohit.acsuilibraryapp D loaded /vendor/lib64/egl/libGLESv2_emulation.so
2026-08-24 22:58:00.405 4131-4131 AppCompatDelegate com.mohit.acsuilibraryapp D Checking for metadata for AppLocalesMetadataHolderService : Service not found
2026-08-24 22:58:00.691 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
2026-08-24 22:58:00.804 4131-4131 Compatibil...geReporter com.mohit.acsuilibraryapp D Compat change id reported: 210923482; UID 1010206; state: ENABLED
2026-08-24 22:58:00.881 4131-4131 System.err com.mohit.acsuilibraryapp W SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
2026-08-24 22:58:00.881 4131-4131 System.err com.mohit.acsuilibraryapp W SLF4J: Defaulting to no-operation (NOP) logger implementation
2026-08-24 22:58:00.882 4131-4131 System.err com.mohit.acsuilibraryapp W SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2026-08-24 22:58:01.270 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W Accessing hidden method Lsun/misc/VM;->maxDirectMemory()J (unsupported, reflection, allowed)
2026-08-24 22:58:01.274 4131-4131 PlatformDependent com.mohit.acsuilibraryapp I Your platform does not provide complete low-level API for accessing direct buffers reliably. Unless explicitly requested, heap buffer will always be preferred to avoid potential system instability.
2026-08-24 22:58:01.579 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W Accessing hidden method Ljava/lang/invoke/LambdaMetafactory;->metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; (blocked, linking, denied)
2026-08-24 22:58:01.918 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W type=1400 audit(0.0:33): avc: denied { read } for name="somaxconn" dev="proc" ino=108739 scontext=u:r:untrusted_app:s0:c206,c256,c522,c768 tcontext=u:object_r:proc_net:s0 tclass=file permissive=0
2026-08-24 22:58:02.173 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp E No implementation found for int io.netty.internal.tcnative.Library.aprMajorVersion() (tried Java_io_netty_internal_tcnative_Library_aprMajorVersion and Java_io_netty_internal_tcnative_Library_aprMajorVersion__)
2026-08-24 22:58:02.312 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp E No implementation found for int io.netty.channel.epoll.Native.offsetofEpollData() (tried Java_io_netty_channel_epoll_Native_offsetofEpollData and Java_io_netty_channel_epoll_Native_offsetofEpollData__)
2026-08-24 22:58:02.375 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp E No implementation found for int io.netty.channel.kqueue.Native.sizeofKEvent() (tried Java_io_netty_channel_kqueue_Native_sizeofKEvent and Java_io_netty_channel_kqueue_Native_sizeofKEvent__)
2026-08-24 22:58:02.421 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W Accessing hidden field Lsun/nio/ch/SelectorImpl;->selectedKeys:Ljava/util/Set; (unsupported, reflection, allowed)
2026-08-24 22:58:02.422 4131-4131 acsuilibraryapp com.mohit.acsuilibraryapp W Accessing hidden field Lsun/nio/ch/SelectorImpl;->publicSelectedKeys:Ljava/util/Set; (unsupported, reflection, allowed)
2026-08-24 22:58:02.459 4131-4131 TrafficStats com.mohit.acsuilibraryapp D tagSocket(96) with statsTag=0xffffffff, statsUid=-1
2026-08-24 22:58:02.482 4131-4131 Compatibil...geReporter com.mohit.acsuilibraryapp D Compat change id reported: 170188668; UID 1010206; state: ENABLED
2026-08-24 22:58:02.490 4131-4131 MacAddressUtil com.mohit.acsuilibraryapp W Failed to find a usable hardware address from the network interfaces; using random bytes: ca:2f:fc:af:9c:76:a5:c8
2026-08-24 22:58:03.554 4131-4274 TrafficStats com.mohit.acsuilibraryapp D tagSocket(96) with statsTag=0xffffffff, statsUid=-1
2026-08-24 22:58:05.267 4131-4336 TrafficStats com.mohit.acsuilibraryapp D tagSocket(96) with statsTag=0xffffffff, statsUid=-1
2026-08-24 22:58:08.413 4131-4434 TrafficStats com.mohit.acsuilibraryapp D tagSocket(96) with statsTag=0xffffffff, statsUid=-1
--------- beginning of crash
2026-08-24 22:58:08.447 4131-4131 AndroidRuntime com.mohit.acsuilibraryapp D Shutting down VM
2026-08-24 22:58:08.448 4131-4131 AndroidRuntime com.mohit.acsuilibraryapp E FATAL EXCEPTION: main
Process: com.mohit.acsuilibraryapp, PID: 4131
2026-08-24 22:58:08.605 4131-4142 acsuilibraryapp com.mohit.acsuilibraryapp I Background concurrent copying GC freed 127587(15MB) AllocSpace objects, 3(56KB) LOS objects, 49% free, 5067KB/10135KB, paused 100us,7us total 209.067ms
2026-08-24 22:58:08.678 4131-4131 Process com.mohit.acsuilibraryapp I Sending signal. PID: 4131 SIG: 9
For your reference, I am also posting the MainActivity code for this small sample app:
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.azure.android.communication.common.CommunicationTokenCredential
import com.azure.android.communication.common.CommunicationTokenRefreshOptions
import com.azure.android.communication.ui.calling.CallCompositeBuilder
import com.azure.android.communication.ui.calling.models.CallCompositeJoinLocator
import com.azure.android.communication.ui.calling.models.CallCompositeTeamsMeetingLinkLocator
import com.azure.communication.identity.CommunicationIdentityClient
import com.azure.communication.identity.CommunicationIdentityClientBuilder
import com.azure.communication.identity.models.CommunicationTokenScope
import com.azure.core.credential.AccessToken
class MainActivity : AppCompatActivity() {
private var userAccessToken: String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val acsIdentityClient = getCommunicationIdentityClient()
userAccessToken = createAcsUserAndGetAccessToken(acsIdentityClient)
val startButton: Button = findViewById(R.id.startButton)
startButton.setOnClickListener { l -> startCallComposite() }
}
private fun startCallComposite() {
val communicationTokenRefreshOptions =
CommunicationTokenRefreshOptions(::fetchToken, true)
val communicationTokenCredential =
CommunicationTokenCredential(communicationTokenRefreshOptions)
val locator: CallCompositeJoinLocator =
CallCompositeTeamsMeetingLinkLocator("https://teams.live.com/meet/9316675669362?p=2PatJEdgqNhouCyMUG")
val callComposite = CallCompositeBuilder()
.applicationContext(this.applicationContext)
.credential(communicationTokenCredential)
.displayName("John Doe").build()
callComposite.launch(this, locator)
}
private fun fetchToken(): String {
return userAccessToken
}
private fun getCommunicationIdentityClient(): CommunicationIdentityClient {
return CommunicationIdentityClientBuilder()
.connectionString(CONNECTION_STRING)
.buildClient()
}
private fun createAcsUserAndGetAccessToken(acsIdentityClient: CommunicationIdentityClient): String {
val user = acsIdentityClient.createUser()
Log.d(TAG, "Created a user identity in ACS with id: ${user.id}")
val scopes: List<CommunicationTokenScope> = listOf(CommunicationTokenScope.VOIP)
val accessToken: AccessToken = acsIdentityClient.getToken(user, scopes)
val token = accessToken.token
return token
}
companion object {
private const val CONNECTION_STRING = "<MY-CONNECTION-STRING>"
private const val TAG = "MainActivity"
}
}