Android Auto Dekstop ANR головного устройства: GET_APP_VERSION

#android #android-auto

#Android #android-авто

Вопрос:

Я сижу с приложением и хочу попробовать его для Android Auto. Я использую DHU для эмуляции панели мониторинга, но я не могу увидеть макет из-за ошибки ANR (приложение не отвечает).

введите описание изображения здесь

Я действительно получаю одну ошибку в logcat, но я не уверен, связано ли это с этим:

 2021-03-04 15:36:07.654 19595-19616/com.ooono.app W/Binder: Caught a RuntimeException from the binder stub implementation.
    java.lang.SecurityException: Binder invocation to an incorrect interface
        at android.os.Parcel.nativeEnforceInterface(Native Method)
        at android.os.Parcel.enforceInterface(Parcel.java:650)
        at androidx.car.app.ICarApp$Stub.onTransact(ICarApp.java:207)
        at android.os.Binder.execTransactInternal(Binder.java:1159)
        at android.os.Binder.execTransact(Binder.java:1123)
 

Мой код в основном таков

 import android.content.Intent
import android.content.pm.ApplicationInfo
import androidx.car.app.*
import androidx.car.app.model.*
import androidx.car.app.navigation.model.NavigationTemplate
import androidx.car.app.validation.HostValidator

class CarActivity : CarAppService() {

    override fun createHostValidator(): HostValidator {
        return if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE !== 0) {
            HostValidator.ALLOW_ALL_HOSTS_VALIDATOR
        } else {
            HostValidator.Builder(this)
                    .addAllowedHosts(R.array.hosts_allowlist_sample)
                    .build()
        }
    }

    override fun onCreateSession(): Session {
        return object : Session(){
            override fun onCreateScreen(intent: Intent): Screen {
                return NavScreen(carContext)
            }
        }
    }

    class NavScreen(carContext: CarContext) : Screen(carContext){
        override fun onGetTemplate(): Template {
            val listTemplate = ListTemplate.Builder().apply {
                addSectionedList(SectionedItemList.create(
                        ItemList.Builder()
                                .addItem(Row.Builder().setTitle("list 1").addText("hellowrodl").build())
                                .build(),"List"
                ))
            }

            return listTemplate.build()
        }

        private fun actionStrip():ActionStrip{
            val strip = ActionStrip.Builder().apply {
                addAction(Action.Builder().setIcon(CarIcon.APP_ICON).setTitle("Ooono").setOnClickListener { }.build())
            }.build()
            return strip
        }
    }
}

 

и я добавил необходимые теги в манифест:

 <meta-data
            android:name="com.google.android.gms.car.application"
            android:resource="@xml/automotive_app_desc" />


<service
            android:name=".aa.CarActivity"
            android:label="@string/common_app_name"
            android:icon="@mipmap/ic_launcher"
            android:foregroundServiceType="location"
            android:exported="true">
            <intent-filter>
                <action android:name="androidx.car.app.CarAppService"/>
                <category android:name="androidx.car.app.category.NAVIGATION"/>
            </intent-filter>
        </service>
 

Ответ №1:

У меня была та же проблема. В зависимости от того, насколько новым является ваш Android-телефон, у вас должно быть 2 варианта:

  1. Изменить библиотеку:
    изменение библиотеки с AndroidX на руководство по миграции com.google.android (просто обратные слова) является понижением. AndroidX предоставляет больше функциональности и будет регулярно обновляться — com.google.android закрыт. Для первого впечатления, если все будет в порядке, для дальнейших подходов рекомендуется AndroidX
    Попробовать демонстрационную версию HelloWorld, чтобы проверить ее функциональность
    —> В моем случае проблема заключалась в «старом» физическом телефоне с Android 9, и старая библиотека работает без каких-либо проблем, а Android X — нет.

    Полезные ссылки:
    Обзор библиотеки автомобильных приложений AndroidX

    com.обзор библиотеки google.android

  2. Используйте новый телефон -> Android 10 должен быть в порядке.
    Мой основной телефон Android (xiaomi mi note 10 lite — Android 10) и AndroidX работают без проблем

Комментарии:

1. Чтобы сделать ваш ответ более актуальным, вы должны объяснить, что включает в себя изменение библиотеки и на что ее следует изменить. Также было бы полезно объяснить, почему изменение версии Android улучшит ситуацию и какие проблемы вызывает использование текущей библиотеки.

2. Я использовал Pixel 3a с A11, так что вряд ли что-то старое :/

Ответ №2:

Я использовал Samsung 9 с Android 10, когда столкнулся с этой ошибкой, затем переключился на свой Pixel 3XL с Android 11, и он начал работать. Действительно странно!