Diario

Migración a Android 16 y verificación anticipada de Android 17

5 Mins read

En resumen: si envías una actualización con un targetSdkVersion inferior al que Google Play exige, se rechaza en el momento de la subida. Eso significa que no podrás publicar actualizaciones en la tienda en absoluto. No se trata de nuevas funcionalidades — es un requisito obligatorio para seguir distribuyendo actualizaciones a los usuarios existentes y mantener tu ficha en la tienda.

Google Play ha estado elevando el targetSdkVersion mínimo en un nivel cada 31 de agosto. Actualmente (desde agosto de 2025 en adelante), todas las actualizaciones por debajo de API 35 (Android 15) son rechazadas.

Período de entrada en vigor Requisito Si no se cumple
Desde agosto de 2023 Se requiere API 33 (Android 13) o superior Subida rechazada
Desde agosto de 2024 Se requiere API 34 (Android 14) o superior Subida rechazada
Desde agosto de 2025 Se requiere API 35 (Android 15) o superior Subida rechazada
Alrededor de agosto de 2026 (estimado) Se requerirá API 36 (Android 16) o superior Subida rechazada

(Fuente: Requisitos de nivel de API objetivo de Google Play)

Según este patrón, la entrada en vigor de API 36 (Android 16) es más probable alrededor de agosto de 2026. Para completar el cumplimiento antes de que entre en vigor, este artículo delimita el trabajo partiendo de una fecha límite interna de junio de 2026. Android 17 ha alcanzado la estabilidad de plataforma en la Beta 3, así que ejecutar la verificación anticipada en una línea de trabajo paralela ahora significa que no estarás corriendo cuando llegue la versión final.

Orden de prioridad

Elemento Fecha límite Prioridad Qué hacer ahora
Cumplimiento de targetSdkVersion 36 (Android 16) Para junio de 2026 Máxima prioridad Pruebas de regresión de flujos clave, fijar CI, finalizar plan de lanzamiento
Verificación de la Beta 3 de Android 17 Comenzar ahora (adelantado) Alta (línea separada) Pruebas de compatibilidad en emulador y dispositivos reales, auditoría de cambios de comportamiento
Adopción de nuevas funcionalidades de Android 17 Después del lanzamiento oficial Menor PoC comenzando por áreas de bajo impacto

Primero, pon en orden las herramientas

Ya sea que estés trabajando en el cumplimiento de Android 16 o en la verificación temprana de Android 17, los primeros bloqueos suelen ser problemas con las herramientas de compilación, no con las APIs del sistema operativo. Asegura las herramientas primero.

Componente Línea base Motivo
Android Studio Panda 3 estable Base estable para el trabajo con targetSdkVersion 36
AGP 9.1.0 Más fácil absorber diferencias en R8 y cambios en lint
JDK 17 Prerrequisito para AGP 9.1
Kotlin 2.3.20 Alinearse en una versión base estable
plugins {
    id("com.android.application") version "9.1.0" apply false
    id("org.jetbrains.kotlin.android") version "2.3.20" apply false
}

Fijar JDK 17 en CI, actualizar AGP y absorber las diferencias de R8 sirve para ambos propósitos — sienta las bases para Android 17 mientras completa el cumplimiento de Android 16.

Nota: Distribución real de versiones de Kotlin y coste de migración

El «Kotlin 2.3.20» de la tabla anterior es la línea base recomendada. En la práctica, muchos proyectos siguen en la línea 1.9.x. Los proyectos financieros, gubernamentales y de gran escala en Japón tienden a ser especialmente conservadores — la mentalidad de «está estable, así que no lo actualices» persiste durante mucho tiempo.

El gráfico a continuación es una estimación de principios de 2026 basada en datos públicos del ecosistema de JetBrains y observaciones de la comunidad.

Kotlin version distribution in production (early 2026 estimate)

(Valores estimados. Para datos exactos de cuota por versión, consulta la última Encuesta del ecosistema de desarrolladores de JetBrains)

Al actualizar de 1.9.x a 2.x, rara vez es solo una actualización de Kotlin — normalmente implica una actualización conjunta de Compose, Coroutines y AGP. Cambiar al compilador K2 puede modificar cierto comportamiento de inferencia de tipos, causando errores de compilación. «No necesitamos actualizar nuestra app 1.9.x que funciona bien ahora mismo» es una decisión perfectamente pragmática.

Kotlin actual Enfoque del compilador de Compose AGP mínimo Consideraciones clave al actualizar
1.9.x Heredado compose_compiler_extension_version 8.x Puede mantenerse, pero acercándose a fin de soporte
2.0.x Plugin del compilador de Compose (integrado en el plugin de Kotlin) 8.4 o superior Debe migrarse al enfoque de plugin
2.1.x Igual que el anterior 8.7 o superior K2 habilitado por defecto. Mejor estabilidad de Compose
2.3.x Igual que el anterior 9.0 o superior Vanguardia en 2026. Requiere AGP 9.1

Cambios de comportamiento en Android 17 a los que adelantarse

Los cambios de comportamiento tienen mayor impacto en las apps existentes que las nuevas funcionalidades. Concéntrate primero en los cambios que afectan a todas las apps.

Cambio Apps más afectadas Qué verificar primero
Trayectoria de obsolescencia de usesCleartextTraffic Todas las apps que actualmente permiten HTTP Migrar las conexiones de prueba e internas a la configuración de seguridad de red
Eliminación de concesiones implícitas de permisos URI Apps con flujos de compartir, cámara o adjuntar archivos Reescribir para usar concesiones de permisos explícitas
Cambio de comportamiento de visibilidad del IME tras rotación Todas las pantallas con formularios de entrada Pruebas de regresión en flujos de inicio de sesión, registro y búsqueda
Restricciones más estrictas de audio en segundo plano Apps de reproducción, llamadas y notificaciones de audio Evaluar si es necesaria la migración a servicios en primer plano

Prioridad de pruebas para soporte simultáneo de Android 16 y 17

Cuando se ejecutan en paralelo el cumplimiento de Android 16 y la verificación temprana de Android 17, es fácil perder de vista qué debe probarse en cada entorno. La siguiente tabla define los elementos requeridos/prioritarios por área de prueba — úsala como punto de control de QA para confirmar cuándo cada área puede considerarse completada.

Área de prueba Android 16 (Producción) Android 17 (Verificación temprana)
Flujos de inicio de sesión / membresía Requerido Requerido
Pantallas WebView Requerido Requerido
Push / reanudación de notificaciones Requerido Alta prioridad
Procesamiento en segundo plano Requerido Alta prioridad
MDM / restricciones de dispositivos empresariales Alta prioridad Alta prioridad
Adopción de nuevas funcionalidades de Android 16/17 (texto predictivo, nuevas APIs de Compose, etc.) Se puede postergar Si hay capacidad

Riesgos específicos de apps empresariales japonesas

Estos puntos rara vez se cubren en artículos generales de migración de Android de fuentes internacionales, pero las apps financieras, gubernamentales y de plataformas con membresía en Japón tienen sus propios problemas específicos. Para proyectos donde la prioridad es verificar que los flujos clave existentes — inicio de sesión, pagos, notificaciones — no se rompan en lugar de adoptar nuevas funcionalidades de Android 16/17 (cambios en canales de notificación, revisiones del modelo de permisos, nuevos componentes de Compose, etc.), revisa primero los elementos a continuación como lista de verificación.

Problema Por qué es un bloqueante Qué verificar primero
WebView Todavía se usa intensamente en flujos de membresía, registro y pago Autenticación, cookies, redirecciones, problemas de renderizado
Certificados / Wi-Fi corporativo Comúnmente falla en dispositivos corporativos y gestionados Fallos de conexión, renovación de certificados, comportamiento de red interna
Restricciones MDM Gran impacto en apps distribuidas en entornos empresariales Permisos, procesamiento en segundo plano, controles de distribución
Push / procesamiento en segundo plano Afecta directamente a notificaciones de membresía, financieras y operacionales Comportamiento de reanudación, retrasos, verificación del comportamiento tras restricciones
Ritmo de renovación de dispositivos Amplia variación de versiones del SO entre la base de usuarios Revisar el rango de SO soportado y el plan de dispositivos de QA

Orden de acción recomendado

  1. Finalizar el plan de lanzamiento asumiendo que la actualización de targetSdkVersion 36 (Android 16) se publica para junio de 2026
  2. Alinear las herramientas: Android Studio, AGP, Kotlin, JDK
  3. Ejecutar primero las pruebas de flujos clave del usuario y regresión para Android 16
  4. En paralelo, crear una rama dedicada para Android 17 e iniciar una línea de verificación con emuladores y dispositivos reales
  5. Abordar los cambios de comportamiento en orden: seguridad, multimedia, conectividad
  6. Ejecutar un pipeline de CI separado con targetSdk 37
Read more
Diario

Nginx reverse proxy: WordPress "mixed content the page at ' url ' was loaded over https"

1 Mins read

En un entorno de reverse proxy con Nginx, cuando el Nginx frontal acepta solicitudes en 443 (HTTPS) e internamente realiza balanceo de carga round-robin en 80 (HTTP), a veces aparece un error de Mixed Content en Chrome.

Para resolver este problema, es efectivo agregar la siguiente configuración al principio de wp-config.php.

/** mixed content the page at ' url ' was loaded over https wordpress nginx */
/** 設定の場合、httpsでリダイレクトするように設定が必要! */
/** HTTP_X_FORWARDED_FOR の環境変数名はAWSなどお使いのサーバー環境により若干変更されている時があるので要確認すること */
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['HTTPS'] = 'on';
}

Si puede operar el archivo nginx.conf en el lado interno de 80 (HTTP), también puede aplicar la siguiente configuración.

Cualquiera de las dos opciones está bien.

location ~ \.php$ {
    include fastcgi_params;

    # mixed content the page at ' url ' was loaded over https wordpress nginx
    # プロキシ設定の場合、httpsでリダイレクトするように設定が必要!ここから
    fastcgi_param HTTPS on;
    fastcgi_param HTTP_X_FORWARDED_PROTO https;
    # ここまで

    fastcgi_intercept_errors on;
    fastcgi_pass php-fpm;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Read more
Diario

Rails 7.0.8.7 Update Error "Logger::Severity.constants.each do |severity|"

1 Mins read

Ruby 3.2.6

Ruby on Rails 7.0.8.7

Falla al iniciar

La causa es la gema

gem 'concurrent-ruby', '1.3.5'

Agrega al final del Gemfile y mantenlo fijo por ahora

gem 'concurrent-ruby', '1.3.4'

Después de agregar, instala

bundle install

# Fetching concurrent-ruby 1.3.4 (was 1.3.5)
# Installing concurrent-ruby 1.3.4 (was 1.3.5)

Log a continuación

# Con 'concurrent-ruby', '1.3.5' aparece el siguiente error, así que fijamos '1.3.4'
#
# bundler: failed to load command: puma (/app-root/vendor/bundle/ruby/3.2.0/bin/puma)
# /app-root/vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.8.7/lib/active_support/logger_thread_safe_level.rb:12:in `<module:LoggerThreadSafeLevel>': uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)
#
# Logger::Severity.constants.each do |severity|
# ^^^^^^^^^^
Read more
Diario

macOS 15 以posterior: El icono de Acceso a Llaveros desapareció de Utilidades

1 Mins read

¿Necesitaba actualizar un certificado y el icono de Acceso a Llaveros no está?

A partir de macOS Sequoia 15, parece que cambió la forma de iniciarlo.

Ahora la aplicación «Contraseñas» se muestra como la principal, y el Acceso a Llaveros que los ingenieros necesitamos está escondido.

Probablemente la fuente de datos sea la misma, pero la aplicación Contraseñas es la que simplificó la experiencia de usuario.

Cómo mostrarlo

Presiona Command + Espacio para abrir Spotlight e ingresa «key» y aparecerá el icono.

Apple también tiene documentado el método de acceso

Read more