Azure Communication Services: Does the ACS UI Library for Android support Android Automotive OS also?

Mohit Sharma 0 Reputation points
2026-08-24T18:25:40.32+00:00

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"     
    } 
}

Azure Communication Services
0 comments No comments

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.