Cómo actualizar mi aplicación de Android sin hacer que los usuarios descarguen una nueva versión

Es posible con Feature Toggles , esta aplicación es un ejemplo para este concepto

Las funciones de alternancia son una técnica poderosa que permite a los equipos modificar el comportamiento del sistema sin cambiar el código. Se dividen en varias categorías de uso, y es importante tener en cuenta esa categorización al implementar y administrar alternar. Las palancas introducen complejidad. Podemos mantener esa complejidad bajo control mediante el uso de prácticas de implementación de alternancia inteligente y herramientas apropiadas para administrar nuestra configuración de alternancia, pero también debemos tratar de limitar la cantidad de alternancias en nuestro sistema.

La “alternancia de funciones” es un conjunto de patrones que pueden ayudar a un equipo a ofrecer nuevas funciones a los usuarios de forma rápida pero segura. En este artículo sobre la función de alternancia de funciones, comenzaremos con una historia corta que muestra algunos escenarios típicos en los que la función de alternancia de funciones es útil. Luego profundizaremos en los detalles, cubriendo patrones y prácticas específicos que ayudarán a un equipo a tener éxito con Feature Toggles.


Un cuento de alternar

Imagina la escena. Estás en uno de varios equipos que trabajan en un sofisticado juego de simulación de planificación urbana. Su equipo es responsable del motor de simulación central. Se le ha encomendado la tarea de aumentar la eficiencia del algoritmo de reticulación de spline. Usted sabe que esto requerirá una revisión bastante grande de la implementación que llevará varias semanas. Mientras tanto, otros miembros de su equipo deberán continuar trabajando en áreas relacionadas de la base de código.

Si es posible, desea evitar la ramificación para este trabajo, basándose en experiencias dolorosas previas de fusionar ramas de larga vida en el pasado. En cambio, usted decide que todo el equipo continuará trabajando en el tronco, pero los desarrolladores que trabajan en las mejoras de la retícula de Spline utilizarán una función de alternancia para evitar que su trabajo afecte al resto del equipo o desestabilice la base de código.

El nacimiento de un alternador de funciones

Aquí está el primer cambio introducido por el par que trabaja en el algoritmo:

antes de

función reticulateSplines () {
// la implementación actual vive aquí
}

todos estos ejemplos usan JavaScript ES2015

después

función reticulateSplines () {
var useNewAlgorithm = false;
// useNewAlgorithm = true; // COMENTARIO SI ESTÁS TRABAJANDO EN EL NUEVO ALGORITMO SR

if (useNewAlgorithm) {
retorno mejoradoSplineReticulation ();
}más{
return oldFashionedSplineReticulation ();
}
}

function oldFashionedSplineReticulation () {
// la implementación actual vive aquí
}

función EnhancedSplineReticulation () {
// TODO: implementar un mejor algoritmo SR
}

El par ha movido la implementación actual del algoritmo a una función oldFashionedSplineReticulation y ha convertido reticulateSplines en un punto de oldFashionedSplineReticulation . Ahora, si alguien está trabajando en el nuevo algoritmo, puede habilitar la función “usar nuevo algoritmo” al descomentar la línea useNewAlgorithm = true .

Hacer una dinámica de alternar

Pasan algunas horas y la pareja está lista para ejecutar su nuevo algoritmo a través de algunas de las pruebas de integración del motor de simulación. También quieren ejercer el antiguo algoritmo en la misma ejecución de prueba de integración. Deberán poder habilitar o deshabilitar la característica dinámicamente, lo que significa que es hora de pasar del mecanismo torpe de comentar o descomentar que useNewAlgorithm = true línea useNewAlgorithm = true :

función reticulateSplines () {
if (featureIsEnabled (“use-new-SR-algoritm”)) {
retorno mejoradoSplineReticulation ();
}más{
return oldFashionedSplineReticulation ();
}
}

Ahora hemos introducido una función featureIsEnabled , un Toggle Router que se puede usar para controlar dinámicamente qué codepath está activo. Hay muchas formas de implementar un Toggle Router, que varía desde un simple almacén en memoria hasta un sistema distribuido altamente sofisticado con una elegante interfaz de usuario. Por ahora comenzaremos con un sistema muy simple:

función createToggleRouter (featureConfig) {
regreso {
setFeature (featureName, isEnabled) {
featureConfig [featureName] = isEnabled;
},
featureIsEnabled (featureName) {
return featureConfig [featureName];
}
};
}

tenga en cuenta que estamos usando el método abreviado de ES2015

Podemos crear un nuevo enrutador de alternancia basado en alguna configuración predeterminada, tal vez leer desde un archivo de configuración, pero también podemos activar o desactivar dinámicamente una función. Esto permite que las pruebas automatizadas verifiquen ambos lados de una función activada:

describe (‘reticulación spline’, function () {
dejar alternarRouter;
let simulationEngine;

beforeEach (function () {
toggleRouter = createToggleRouter ();
simulationEngine = createSimulationEngine ({toggleRouter: toggleRouter});
});

it (‘funciona correctamente con un algoritmo antiguo’, function () {
// Dado
toggleRouter.setFeature (“use-new-SR-Algoritmo”, falso);

// Cuando
resultado constante = simulationEngine.doSomethingWhichInvolvesSplineReticulation ();

// Luego
verifiedSplineReticulation (resultado);
});

it (‘funciona correctamente con un nuevo algoritmo’, function () {
// Dado
toggleRouter.setFeature (“use-new-SR-algoritm”, verdadero);

// Cuando
resultado constante = simulationEngine.doSomethingWhichInvolvesSplineReticulation ();

// Luego
verifiedSplineReticulation (resultado);
});
});

Preparándose para lanzar

Pasa más tiempo y el equipo cree que su nuevo algoritmo es completo. Para confirmar esto, han estado modificando sus pruebas automatizadas de nivel superior para que ejerzan el sistema tanto con la función desactivada como activada. El equipo también quiere hacer algunas pruebas exploratorias manuales para asegurarse de que todo funcione como se espera: la reticulación por spline es una parte crítica del comportamiento del sistema, después de todo.

Para realizar pruebas manuales de una función que aún no se ha verificado como lista para uso general, necesitamos poder desactivar la función para nuestra base general de usuarios en producción, pero poder activarla para usuarios internos. Hay muchos enfoques diferentes para lograr este objetivo:

  • Haga que el Toggle Router tome decisiones basadas en una configuración de Toggle y que esa configuración sea específica del entorno. Solo active la nueva función en un entorno de preproducción.
  • Permita que la configuración de alternar se modifique en tiempo de ejecución a través de alguna forma de IU de administrador. Use esa interfaz de usuario de administrador para activar la nueva función en un entorno de prueba.
  • Enseñe a Toggle Router cómo tomar decisiones dinámicas de cambio por solicitud. Estas decisiones tienen en cuenta Toggle Context , por ejemplo, al buscar una cookie especial o un encabezado HTTP. Por lo general, Toggle Context se usa como proxy para identificar al usuario que realiza la solicitud.

(Más adelante profundizaremos en estos enfoques, así que no se preocupe si algunos de estos conceptos son nuevos para usted).

El equipo decide optar por un enrutador de palanca por solicitud, ya que les da mucha flexibilidad. El equipo aprecia especialmente que esto les permita probar su nuevo algoritmo sin necesidad de un entorno de prueba separado. En cambio, simplemente pueden activar el algoritmo en su entorno de producción, pero solo para usuarios internos (como se detecta a través de una cookie especial). El equipo ahora puede activar esa cookie por sí mismo y verificar que la nueva función funcione como se esperaba.

Lanzamiento canario

El nuevo algoritmo de reticulación Spline se ve bien en base a las pruebas exploratorias realizadas hasta ahora. Sin embargo, dado que es una parte tan crítica del motor de simulación del juego, sigue habiendo cierta renuencia a activar esta función para todos los usuarios. El equipo decide usar su infraestructura de alternancia de funciones para realizar un lanzamiento de Canarias , solo activando la nueva función para un pequeño porcentaje de su base de usuarios total: una cohorte “canaria”.

El equipo mejora el Toggle Router enseñándole el concepto de cohortes de usuarios: grupos de usuarios que constantemente experimentan una función como siempre activada o desactivada. Se crea una cohorte de usuarios canarios a través de un muestreo aleatorio del 1% de la base de usuarios, tal vez utilizando un módulo de identificación de usuario. Esta cohorte canaria tendrá la función constantemente activada, mientras que el otro 99% de la base de usuarios seguirá utilizando el antiguo algoritmo. Las métricas comerciales clave (participación del usuario, ingresos totales ganados, etc.) se supervisan para ambos grupos para ganar confianza de que el nuevo algoritmo no afecta negativamente el comportamiento del usuario. Una vez que el equipo confía en que la nueva función no tiene efectos nocivos, modifica su configuración de alternancia para activarla para toda la base de usuarios.

Pruebas A / B

El gerente de producto del equipo aprende sobre este enfoque y está muy entusiasmado. Ella sugiere que el equipo use un mecanismo similar para realizar algunas pruebas A / B. Ha habido un largo debate sobre si modificar el algoritmo de índice de criminalidad para tener en cuenta los niveles de contaminación aumentaría o disminuiría la jugabilidad del juego. Ahora tienen la capacidad de resolver el debate utilizando datos. Planean implementar una implementación barata que capture la esencia de la idea, controlada con una función de alternancia. Activarán la función para una cohorte de usuarios razonablemente grande, luego estudiarán cómo se comportan esos usuarios en comparación con una cohorte de “control”. Este enfoque permitirá al equipo resolver debates polémicos sobre productos basados ​​en datos, en lugar de HiPPO.

Este breve escenario tiene la intención de ilustrar tanto el concepto básico de alternancia de características como también resaltar cuántas aplicaciones diferentes puede tener esta capacidad central. Ahora que hemos visto algunos ejemplos de esas aplicaciones, profundicemos un poco más. Exploraremos diferentes categorías de conmutadores y veremos qué los hace diferentes. Cubriremos cómo escribir código de alternancia mantenible, y finalmente compartiremos prácticas para evitar algunos de los escollos de un sistema de alternancia de funciones.


Categorías de conmutadores

Hemos visto la facilidad fundamental proporcionada por Feature Toggles: poder enviar rutas de código alternativas dentro de una unidad desplegable y elegir entre ellas en tiempo de ejecución. Los escenarios anteriores también muestran que esta instalación se puede utilizar de varias maneras en diversos contextos. Puede ser tentador agrupar todas las funciones en el mismo cubo, pero este es un camino peligroso. Las fuerzas de diseño en juego para diferentes categorías de conmutadores son bastante diferentes y manejarlas todas de la misma manera puede generar dolor en el futuro.

Las funciones de alternancia pueden clasificarse en dos dimensiones principales: cuánto tiempo durará la función y qué tan dinámica debe ser la decisión de alternar. Hay otros factores a tener en cuenta, por ejemplo, quién administrará la alternancia de funciones, pero considero que la longevidad y el dinamismo son dos factores importantes que pueden ayudar a guiar la forma en que se manejan los conmutadores.

Fuente: alternar funciones

Bueno, no soy un desarrollador de Android “muy” experimentado, ya que las personas que han respondido a esta pregunta son pero déjenme compartir mi idea …

Tengo 14 años y, por supuesto, me encantan los juegos. Recientemente estaba jugando Choque de clanes y hace solo un día mostró “downling blah blah”. Bueno, es común para los juegos en línea, pero al descargar esas cosas “bla”, la versión de la aplicación cambió (me di cuenta porque soy un desarrollador de Android) y también tiene algunas funcionalidades. Y estoy seguro de que el material descargado es> 1mb, ya que solo tomó 1 segundo descargarlo. Investigué al respecto y descubrí que algunas aplicaciones, en su mayoría juegos en línea, usan esta característica que ofrece actualizaciones OTA (puede llamarlo como quieras) desde su servidor, que es independiente de Play Store y funciona.

Entonces, ¿por qué no usamos para aplicaciones y también las actualizaciones son suficientemente del mismo tamaño? Por ejemplo, el tamaño de choque de clanes es de 70 mb y esa actualización fue de aproximadamente 1 mb.

Pido disculpas si cometí algún error al responder y agradeceré cualquier sugerencia. 😉

Usando Play Store, no puedes hacerlo.

Sin embargo, si tiene mucha curiosidad por encontrar una manera de hacerlo,

  1. Genere su APK y fírmelo con el mismo certificado que solía poner en Play Store.
  2. Envíe el APK a sus usuarios por correo electrónico y pídales que lo instalen habilitando “Fuentes desconocidas”

Estoy 100% seguro de que sus usuarios no estarán de acuerdo. ¡Solo un pensamiento para lo que preguntaste!

En primer lugar, eso sería una violación de la privacidad, pero sus usuarios han activado las actualizaciones automáticas, entonces puede hacerlo.

Xender para PC – Xender para PC gratis – Phoneappsforpc – Onlinepcapps

Hay una nueva forma de desarrollar aplicaciones nativas tanto para iOS como para Android.

Verifique: Aplicación nativa a través de HTTP

Esta es una nueva forma emocionante que funciona en solicitudes HTTP / JSON. Muy inteligente. Puede que no sea una solución perfecta para algunos proyectos, pero puede usarse en muchos de ellos.

Teóricamente, puede publicar una aplicación de reproductor de música y puede cambiarla a una aplicación de cámara sin actualizar la aplicación. ¡Inteligente!

Las actualizaciones para su teléfono o tableta pueden ser eventos emocionantes. Suelen aportar nuevas características y funcionalidades, así como un mayor rendimiento. Su dispositivo normalmente le informa cuando hay una actualización disponible, pero estos mensajes pueden retrasarse. Si sabe que hay una actualización disponible y necesita tenerla en sus manos lo antes posible, siga esta guía:

  1. Asegúrese de que la opción de copia de seguridad esté marcada
  2. Abra la configuración de su dispositivo
  3. Desplázate hacia abajo hasta Acerca del teléfono y tócalo para abrir la pantalla de información de tu dispositivo.
  4. Toque la opción Actualizaciones del sistema
  5. Toque Verificar ahora
  6. Toque Reiniciar e instalar

Imposible

Pero una forma de hacerlo es la configuración remota

Puedes estudiarlo en muchos sitios web, incluso en el sitio web oficial de desarrolladores de Android

En configuración remota

Pones tu código en la aplicación

Publícalo

Y cambie los componentes de la aplicación desde el lado del servidor cambiando algunos valores

Pero en este enfoque, debe implementar su código dentro de la aplicación y puede activarlo a través de su servidor

Como cambiar el diseño / apariencia de la aplicación, etc.

Pero agregar un nuevo código a la aplicación sin actualizar aún no es posible

Al igual que Facebook, ¿simplemente actualizan el aspecto de Messenger incluso sin actualizar la aplicación?

Por favor hazme un favor descarga mi aplicación

Text Repeater – Aplicaciones de Android en Google Play

Una vez que se implementa una aplicación en la Play Store, no se puede actualizar sin lanzar un nuevo APK.

Dicho esto, los juegos tienen un buen trabajo para esto. Muchos juegos tendrán una sincronización que tendrá lugar cuando inicies la aplicación. Esto le permite reemplazar activos y dependiendo de cómo se diseñe su aplicación potencialmente más. Sin embargo, hay limitaciones sobre lo que puede cambiar (creo que no he usado esto antes).

Es posible que desee considerar usar algo como fabric o grupos de prueba en Google Play en la consola del desarrollador para poder implementar su aplicación sin poner un nuevo APK en producción.

También hay algunas compañías como Lean Plum que permiten algunas modificaciones sobre la marcha y tales, pero esos son servicios pagados.

Depende de lo que quieras decir al actualizar tu aplicación. Si usa WebViews para representar ciertas áreas de su aplicación, puede enviar actualizaciones a su servidor y hacer que sus usuarios vean las actualizaciones de esas áreas de su aplicación inmediatamente.

No veo cómo eso es posible. La única forma de actualizar su aplicación es cargar un nuevo APK en la tienda.

Las actualizaciones generalmente ocurren automáticamente y en segundo plano. Al usuario no le importará que tenga que descargar una nueva versión. Las actualizaciones solo ocurren por su cuenta. No te preocupes por eso.

No puedes hacer eso. El usuario tendrá que descargar una nueva versión cada vez que realice cambios en su aplicación y los publique. Pero muchos usuarios tienen la actualización automática activada, por lo que puede no ser un gran problema.