Android para vehículos: Guía de migración de Jetpack

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La biblioteca de apps de Android para vehículos ahora forma parte de Jetpack. La migración a Jetpack presenta una serie de beneficios, entre los que se incluyen brindarte una mayor visibilidad sobre el desarrollo de funciones, y también proporciona coherencia de API con otras bibliotecas de Jetpack.

Como parte de este cambio a Jetpack, realizamos varios cambios en la API a los efectos de mantener la coherencia con el resto del ecosistema de Android. Para ayudarte a migrar cualquier app que ya hayas compilado con la versión de código cerrado de la biblioteca de la app para vehículos, elaboramos esta guía, en la que se describen los cambios en detalle y se proporcionan instrucciones para migrar tu app a la nueva biblioteca.

Cambios en AndroidManifest

En el archivo AndroidManifest.xml de tu app, reemplaza las siguientes instancias de la biblioteca de código cerrado con sus equivalentes de la biblioteca de Jetpack, según corresponda:

Categorías de apps

Código cerrado Equivalente de la biblioteca de Jetpack
com.google.android.car.category.NAVIGATION androidx.car.app.category.NAVIGATION
com.google.android.car.category.PARKING androidx.car.app.category.PARKING
com.google.android.car.category.CHARGING androidx.car.app.category.CHARGING

Permisos

Código cerrado Equivalente de la biblioteca de Jetpack
com.google.android.libraries.car.app.ACCESS_SURFACE androidx.car.app.ACCESS_SURFACE
com.google.android.libraries.car.app.NAVIGATION_TEMPLATES androidx.car.app.NAVIGATION_TEMPLATES
No disponible. Novedades de la biblioteca de Jetpack androidx.car.app.MAP_TEMPLATES

CarAppService

Código cerrado Equivalente de la biblioteca de Jetpack
com.google.android.car.action.CAR_APP androidx.car.app.CarAppService

Temas

Código cerrado Equivalente de la biblioteca de Jetpack
com.google.android.libraries.car.app.theme androidx.car.app.theme

Cambios en la API

Cambio en el espacio de nombres

Se cambió el espacio de nombres de la biblioteca de com.google.android.libraries.car.app a androidx.car.app.

Reemplaza todas las importaciones de tu biblioteca de com.google.android.libraries.car.app.* a androidx.car.app.*.

CarAppService y Session

Separamos el ciclo de vida de la conexión del host a tu app de CarAppService a una nueva clase Session. La lógica de creación de CarContext y Screen se movió a Session.

Uno de los puntos de entrada principales de tu app, CarAppService#onCreateScreen(Intent), se reemplazó por CarAppService.onCreateSession. En esencia, varios métodos que antes estaban en CarAppService ahora se encuentran en la clase Session. Si deseas ver más detalles, consulta las siguientes tablas para obtener un resumen y la documentación a nivel de clase de Session.

CarAppService
Código cerrado Equivalente de la biblioteca de Jetpack
finish() Se quitó

En su lugar, invoca a CarContext.finishCarApp directamente.

getCarContext() Se movió a Session
getLifecycle() Se movió a Session
onCarAppFinished() Se quitó

En su lugar, usa Session.getLifecycle y escucha el evento Lifecycle.Event#ON_DESTROY.

onCarConfigurationChanged(Configuration) Se movió a Session
onCreateScreen(Intent) Se movió a Session
onDestroy() Se quitó

Este método ahora es irrelevante, y la lógica se maneja en CarAppService.onUnbind.

onNewIntent(Intent) Se movió a Session
No disponible. Novedades de la biblioteca de Jetpack getCurrentSession()
No disponible. Novedades de la biblioteca de Jetpack onCreateSession()
No disponible. Novedades de la biblioteca de Jetpack createHostValidator() Consulta Validación del host.
Sesión
Código cerrado Equivalente de la biblioteca de Jetpack
Se movió de CarAppService getCarContext()
Se movió de CarAppService getLifeCycle()
Se movió de CarAppService onCarConfigurationChanged(Configuration)
Se movió de CarAppService onCreateScreen(Intent)
Se movió de CarAppService onNewIntent(Intent)

En la forma más simple, tu app puede mostrar una instancia de Session de esta manera si no tiene ninguna lógica que se encargue del ciclo de vida de la conexión:

  @Override
  @NonNull
  public Session onCreateSession() {
    return new Session() {
      @Override
      @NonNull
      public Screen onCreateScreen(@Nullable Intent intent) {
        return new HelloWorldScreen(getCarContext());
      }
    };
  }

Constructores de compilación

Estamos dejando el modelo en el que proporcionábamos compiladores estáticos para crear varios objetos de datos. En cambio, ahora exponemos los constructores de compilación como métodos públicos directamente. Por ejemplo:

    Pane.Builder paneBuilder = Pane.builder();

Se convirtió en:

    Pane.Builder paneBuilder = new Pane.Builder();

Reutilización de compiladores

Estamos dejando el modelo en el que se admitía de forma explícita la reutilización de compiladores. Los métodos de compilación que permiten que tu app borre algunos datos configurados de forma previa ya no están disponibles. Por ejemplo, se quitaron los siguientes métodos (además de otros métodos claros*):

    ActionStrip.Builder.clearActions()

GridItem y GridTemplate nuevos

La biblioteca de Jetpack viene con una GridTemplate nueva que presenta una lista de GridItem en formato de cuadrícula. Si quieres obtener detalles y formas de uso, consulta la documentación de GridTemplate.

Validación del host

Agregamos mecanismos para permitir que tu app valide una conexión de host de una fuente confiable (por ejemplo, Android Auto y el SO Android Automotive). A continuación, se incluye una implementación de muestra del método CarAppService.createHostValidator abstracto:

    @Override
    public HostValidator createHostValidator() {
        if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
            return HostValidator.ALLOW_ALL_HOSTS_VALIDATOR;
        } else {
            return new HostValidator.Builder(getApplicationContext())
                    .addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
                    .build();
        }
    }

Consulta la documentación de CarAppService.createHostValidator para obtener más detalles.

Modificaciones varias

En las siguientes tablas, se destaca el resto de los cambios que realizamos en toda la biblioteca (por ejemplo, cambiar el nombre de las API existentes o agregar API adicionales). Ten en cuenta que esta lista no es exhaustiva, pero proporciona perspectivas sobre las categorías de los cambios que se realizaron a la biblioteca.

AppManager

Código cerrado Equivalente de la biblioteca de Jetpack
setSurfaceListener(SurfaceListener) setSurfaceCallback(SurfaceCallback)

CarContext

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack getCarAppApiLevel()

OnScreenResultCallback -> OnScreenResultListener

Pantalla

Código cerrado Equivalente de la biblioteca de Jetpack
static final String ROOT Se quitó

Se reemplazó por ScreenManager.poptoRoot

getTemplate() onGetTemplate()

ScreenManager

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack popToRoot()

SurfaceListener -> SurfaceCallback

ItemList.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setOnItemsVisibilityChangeListener(OnItemsVisibilityChangedListener) setOnItemsVisibilityChangedListener(OnItemsVisibilityChangedListener)
setSelectable(OnSelectedListener) setOnSelectedListener(OnSelectedListener)

ListTemplate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

Pane.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

PlaceListMapTemplate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

Row.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsBrowsable(boolean) setBrowsable(boolean)

SearchTemplate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

com.google.android.libraries.car.app.SearchListener -> androidx.car.app.model.SearchTemplate.SearchCallback

Toggle.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setCheckedChangeListener(OnCheckedChangeListener) setOnCheckedChangeListener(OnCheckedChangeListener)

NavigationManagerListener -> NavigationManagerCallback

Código cerrado Equivalente de la biblioteca de Jetpack
stopNavigation() onStopNavigation()

NavigationManager

Código cerrado Equivalente de la biblioteca de Jetpack
setListener(NavigationManagerListener) setNavigationManagerCallback(NavigationManagerCallback)
No disponible. Novedades de la biblioteca de Jetpack setNavigationManagerCallback(Executor, NavigationManagerCallback)
No disponible. Novedades de la biblioteca de Jetpack clearNavigationManagerCallback()

Maneuver

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack static int TYPE_ROUNDABOUT_ENTER_CW
static int TYPE_ROUNDABOUT_EXIT_CW
static int TYPE_ROUNDABOUT_ENTER_CCW
static int TYPE_ROUNDABOUT_EXIT_CCW
static int TYPE_FERRY_BOAT_LEFT
static int TYPE_FERRY_BOAT_RIGHT
static int TYPE_FERRY_TRAIN_LEFT
static int TYPE_FERRY_TRAIN_RIGHT
Quitado static int TYPE_ROUNDABOUT_ENTER
static int TYPE_ROUNDABOUT_EXIT

PlaceListNavigationTemplate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

RoutePreviewNavigationTemplate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

RoutingInfo.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

TravelEstimate

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack static long REMAINING_TIME_UNKNOWN
static Builder builder(Distance, Duration, DateTimeWithZone) static Builder builder(Distance, DateTimeWithZone)
static Builder builder(Distance, Duration, ZonedDateTime) static Builder builder(Distance, ZonedDateTime)

TravelEstimate.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack setRemainingTimeSeconds(long)
No disponible. Novedades de la biblioteca de Jetpack setRemainingTime(Duration)

Trip.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
setIsLoading(boolean) setLoading(boolean)

CarAppExtender

Código cerrado Equivalente de la biblioteca de Jetpack
getLargeIconBitmap() getLargeIcon()
getSmallIconResId() getSmallIcon()

CarAppExtender.Builder

Código cerrado Equivalente de la biblioteca de Jetpack
No disponible. Novedades de la biblioteca de Jetpack setColor(CarColor)

Biblioteca de pruebas

La biblioteca de pruebas aún no está disponible en la primera versión beta. Parte de la funcionalidad que ofrece la biblioteca de pruebas para acceder a campos establecidos en modelos a través de sus clases de compilación ya está disponible mediante los métodos get de los modelos. El resto de la funcionalidad de pruebas estará disponible cuando la biblioteca de pruebas se lance como parte de Jetpack en un futuro cercano.